【问题标题】:Starting KMDF driver service after stopping results in mysterious error停止后启动 KMDF 驱动程序服务导致神秘错误
【发布时间】:2018-07-05 14:29:26
【问题描述】:

我编写了一个非常基本的 KMDF 驱动程序,安装了它,并以net start KmdfStart 启动它。然后我用net stop KmdfStart 停止了它。到目前为止没有问题。

但是,当我使用 net start KmdfStart 再次启动它时,我得到了 System error 2 has occurred. The system cannot find the file specified。只有重新启动计算机才有帮助。每次我启动和停止,然后尝试启动时都会出现此问题。错误会立即显示在控制台中。

注册表项HKLM\SYSTEM\CurrentControlSet\Services\KmdfStart 的值ImagePath 设置为System32\drivers\KmdfStart.sys,并且该文件确实存在。

当文件明显存在时,net start 怎么会因为这个错误而失败?

【问题讨论】:

  • 您是否确保在卸载驱动程序时进行清理(例如,设备创建、符号链接创建等)?忘记这样做可能会导致这种行为。
  • @ImmortaleVBR 实际上不久前我发现这是原因。请把它写成答案,所以我可以接受。为什么虽然不清理却会给出“系统找不到指定的文件”错误?
  • @ImmortaleVBR DriverEntry 根本没有第二次运行,因为我把 DbgPrint("started") 作为第一行,它只运行第一次。

标签: windows-services drivers wdk kmdf


【解决方案1】:

在卸载设备驱动程序之前忘记清理通常是在这些情况下出现错误消息的原因。我之前只看到过两次此错误消息:尝试通过网络加载设备驱动程序时(例如共享文件夹);或者因为在第一次卸载之前忘记清理设备驱动程序 - 这会在第二次产生问题。

确切地说,“清理”是指取消注册任何已创建的符号链接、设备等。如果您不这样做,那么当您下次尝试重新加载设备驱动程序时(在卸载它之后),入口点可以命中,但不会继续尝试创建设备或符号链接,因为您没有在设备驱动程序的最后一次会话中清理它。

如果您正在执行诸如创建设备 (IoCreateDevice/Secure) 和符号链接之类的操作,请确保在驱动程序的卸载例程中对其进行清理。在此示例中,不清理会导致问题,因为您将尝试使用已经存在但不再使用的名称创建设备/符号链接,并且您无法创建设备/符号链接与另一个名称相同,否则在创建尝试时会发生冲突。

基本上,永远不要忘记清理,因为避免此类错误、防止内存泄漏等非常重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-25
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多