停止后启动 KMDF 驱动程序服务会导致神秘错误

Starting KMDF driver service after stopping results in mysterious error

我写了一个非常基本的 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 怎么会失败并出现此错误?

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

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

如果您正在做任何事情,例如创建设备 (IoCreateDevice/Secure) 和符号 link,请确保在驱动程序的卸载例程中清理它。在此示例中,不清理会导致问题,因为您将尝试创建一个 device/symbolic link 其名称已经存在但不再被使用,并且您不能a device/symbolic link 以与另一个相同的名称创建,否则在尝试创建时会发生冲突。

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