I am working on WinDRBD: https://github.com/LINBIT/windrbd
This driver is stoppable (so sc stop windrbd works). However at some points (when there are DRBD devices configured) I want to prevent the user from stopping the driver.
The driver is linked with
/DRIVER /SUBSYSTEM:WINDOWS /NODEFAULTLIB /ENTRY:DriverEntry
and AddDevice is not set (while DriverUnload is set and does the right thing (TM)).
What I am looking for is some kernel API call which sets and resets the STOPPABLE flag of the driver. I tried to reference the root device / driver object (via ObReferenceObjectByPointer()) which does not prevent the driver from being stopped. I also tried to have an open file handle to the root device object (which prevents the driver from being unloaded, it gets stuck in STOP_PENDING), but then the root device object cannot be opened any more (which is needed to bring the remaining resources down).
Is there a way to control the STOPPABLE flag programmatically? Thanks and best wishes, Johannes