После некоторых экспериментов я обнаружил, что установка члена AddDevice DriverExtension объекта драйвера (который является параметром для DriverEntry
функция) к ненулевому значению предотвращает выгрузку драйвера. настройка
этот элемент обратно в NULL позволяет пользователю снова выгружать драйвер с помощью sc stop.
Чтобы предотвратить выгрузку драйвера, выполните
theDriverObject->DriverExtension->AddDevice = theAddDeviceFunction;
чтобы сделать его снова не загружаемым, сделайте
theDriverObject->DriverExtension->AddDevice = NULL;
(где theAddDeviceFunction может быть функцией, которая просто возвращает значение ошибки, как в:
NTSTATUS theAddDeviceFunction(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT PhysicalDeviceObject)
{
return STATUS_NO_SUCH_DEVICE;
}
)
Обратите внимание, что при этом значение флага STOPPABLE, напечатанного запросом sc, становится бессмысленным ... оно может сказать, что NOT STOPPABLE, когда
драйвер может быть выгружен и наоборот.