Я работаю над WinDRBD: https://github.com/LINBIT/windrbd
Этот драйвер можно остановить (поэтому работает sc stop windrbd). Однако в некоторых моментах (когда настроены устройства DRBD) я хочу запретить пользователю останавливать драйвер.
Драйвер связан с
/DRIVER /SUBSYSTEM:WINDOWS /NODEFAULTLIB /ENTRY:DriverEntry
и AddDevice не установлен (в то время как DriverUnload установлен и делает правильную вещь (TM)).
Я ищу какой-то вызов API ядра, который устанавливает и сбрасывает флаг STOPPABLE драйвера. Я попытался сослаться на объект корневого устройства/драйвера (через ObReferenceObjectByPointer()), что не мешает остановке драйвера. Я также пытался иметь дескриптор открытого файла для объекта корневого устройства (что предотвращает выгрузку драйвера, он застревает в STOP_PENDING), но тогда объект корневого устройства больше не может быть открыт (что необходимо, чтобы принести оставшиеся ресурсы вниз).
Есть ли способ программно управлять флагом STOPPABLE? Спасибо и наилучшие пожелания, Йоханнес