【问题标题】:How can service be notified of driver uninstall?如何通知服务驱动程序卸载?
【发布时间】: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 将在卸载驱动程序时发送服务中的停止事件。但同样,我不知道停止事件是来自手动停止还是卸载。

【问题讨论】:

    标签: c++ service driver


    【解决方案1】:

    作为一种解决方法,我创建了一个单独的服务来监控DriverStore\FileRepository 中的二进制文件何时被FindNextChangeNotification(m_handle); 删除。一旦它检测到删除,我就会打电话给DeleteService()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多