Я сделал простой не 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
. Чтобы выгрузить драйвер, мне нужно перезагрузить компьютер.
Есть ли что-то, чего мне не хватает, что помешало бы остановке драйвера?