Невозможно остановить / выгрузить не PnP-драйвер с помощью ServiceManager - PullRequest
0 голосов
/ 14 января 2020

Я сделал простой не PnP-драйвер на основе примера драйвера Microsoft, найденного здесь: https://github.com/microsoft/Windows-driver-samples/tree/master/general/ioctl/kmdf/sys

Я думаю, что все делаю правильно. Мой DriverEntry() содержит:

WDF_DRIVER_CONFIG_INIT(&Config, WDF_NO_EVENT_CALLBACK);

Config.DriverInitFlags |= WdfDriverInitNonPnpDriver;

Config.EvtDriverUnload = DriverUnload;

status = WdfDriverCreate(DriverObject, RegistryPath, &Attributes, &Config, &DriverHandle);
if (!NT_SUCCESS(status)) {
    return status;
}

pInit = WdfControlDeviceInitAllocate(DriverHandle, &SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RW_RES_R);

if (pInit == NULL) {
  status = STATUS_INSUFFICIENT_RESOURCES;
  return status;
}

return status;

Я также создаю устройство в DriverEntry() (поскольку оно не поддерживает PnP), но проблема сохраняется даже без создания устройства.

I используйте ServiceManager для установки / запуска / остановки / удаления драйвера.

Установка и запуск работают правильно. Но когда я пытаюсь остановить драйвер с помощью SERVICE_CONTROL_STOP, ControlService возвращает ERROR_INVALID_SERVICE_CONTROL. Чтобы выгрузить драйвер, мне нужно перезагрузить компьютер.

Есть ли что-то, чего мне не хватает, что помешало бы остановке драйвера?

...