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

时间:2018-07-05 14:29:26

标签: windows-services drivers wdk kmdf

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

1 个答案:

答案 0 :(得分:2)

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

确切地说,通过“清理”,我指的是取消注册任何创建的符号链接,设备等。如果不这样做,则下次尝试重新加载设备驱动程序时(卸载后) ),入口点可以命中,但尝试创建设备或符号链接将无法进行,因为您没有在上次会话中为设备驱动程序清理过它。

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

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