我正在研究 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 标志?谢谢和最美好的祝愿,约翰内斯