【发布时间】:2020-10-28 10:06:42
【问题描述】:
我有一个通过 INF 文件安装的驱动程序。 安装驱动程序时也会自动启动服务。
成功安装后,所有二进制文件都将在%SystemRoot%\System32\DriverStore\FileRepository 中。
现在,当我从设备管理器中卸载我的驱动程序时>系统设备检查“删除此设备的驱动程序软件”
我的服务将收到来自服务控制管理器的SERVICE_CONTROL_STOP。收到此事件后,我想调用DeleteService()删除该服务及其对应的注册表项。
但是,我意识到我不能立即调用DeleteService(),因为手动停止服务可能会触发来自SCM的SERVICE_CONTROL_STOP,在这种情况下不能删除服务。
所以我想知道如何从我的服务中确定我的驱动程序已被卸载,以便我知道何时正确调用DeleteService()。
这是我在“谷歌”几个小时后得到的结果:
- 在某些版本的 Windows 中,在卸载后,在
SERVICE_CONTROL_STOP通知服务之前,会立即删除DriverStore\FileRepository中的二进制文件。我可以检查驱动程序二进制文件是否被删除,如果是,则将其卸载。 - 在 INF 的
DelService部分添加SPSVCINST_STOPSERVICE将在卸载驱动程序时发送服务中的停止事件。但同样,我不知道停止事件是来自手动停止还是卸载。
【问题讨论】: