Почему мой загрузчик пользователя не может связаться с моим драйвером в режиме ядра без знака?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой загрузчик пользователя не может связаться с моим драйвером в режиме ядра без знака?

Сообщение Anonymous »

Описание:
Я разрабатываю подтверждение концепции, где загрузчик пользовательского режима (Driverload.exe) связывается с режимом ядра Драйвер (DriverHelper.sys). Драйвер не подписывается, поэтому я использую Efiguard для его загрузки. DriverHelper.sys) должен выявлять устройство (\ device \ DriverHelper) и разрешить связь с помощью deviceioControl (). < /P>
Загрузчик (Driverloader.exe) должен отправить IOCTL запрос (ioctl_map_driver) для драйвера, чтобы вручную карту другого драйвера в память ядра. Драйвер успешно загружается (подтверждается через SC Query DriverHelper). < /P>
Я вижу сообщения dbgprint () в dbgview.exe, которые подтверждает, что драйвер работает. < /p>
Однако CreateFileA ("\\. \ DriverHelper", ...) в загрузке сбое с кодом ошибки 1 (error_invalid_function), что означает, что он не может Откройте устройство. < /p>
🛠 Что я попробовал: < /strong> < /p>
  • Iocreatedevice () и iocreatesymboliclink () выполняется без
    ошибок (зарегистрированное в dbgview). < /Li>
    Проверено, что драйвер работает с SC Query DriverHelper. < /Li>
    < li> подтвердил, что dbgview.exe захватывает журналы, но не появляется ошибок.

📌 Вопрос:

Почему createfilea ("\\. \ DriverHelper", ...) сбой с ошибкой_инвалид_функции, даже если драйвер Запуск и разоблачение устройства? Как я могу правильно разоблачить устройство для пользовательского режима, чтобы загрузчик мог общаться с ним? > драйвер режима ядра (DriverHelper.sys)
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) {
UNICODE_STRING devName = RTL_CONSTANT_STRING(L"\\Device\\DriverHelper");
UNICODE_STRING symLink = RTL_CONSTANT_STRING(L"\\DosDevices\\DriverHelper");

PDEVICE_OBJECT DeviceObject = NULL;
NTSTATUS status = IoCreateDevice(DriverObject, 0, &devName,
FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN,
FALSE, &DeviceObject);
if (!NT_SUCCESS(status)) {
DbgPrint("[DriverHelper] Error en IoCreateDevice: %X\n", status);
return status;
}

status = IoCreateSymbolicLink(&symLink, &devName);
if (!NT_SUCCESS(status)) {
IoDeleteDevice(DeviceObject);
return status;
}

DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverDispatch;
DbgPrint("[DriverHelper] Driver Loaded\n");
return STATUS_SUCCESS;
}

Пользовательский режим загрузки (Driverloader.exe)
HANDLE hDevice = CreateFileA("\\\\.\\DriverHelper", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
std::cerr

Подробнее здесь: https://stackoverflow.com/questions/794 ... ode-driver
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»