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

Windows services 停止后启动KMDF驱动程序服务会导致神秘错误,windows-services,drivers,wdk,kmdf,Windows Services,Drivers,Wdk,Kmdf,我编写了一个非常基本的KMDF驱动程序,安装了它,并用netstart KmdfStart启动了它。然后我用net stop KmdfStart停止了它。目前没有问题 但是,当我使用net start KmdfStart再次启动它时,出现了系统错误2。系统找不到指定的文件。只有重新启动计算机才有帮助。每次启动和停止,然后尝试启动时,都会发生此问题。该错误将立即显示在控制台中 注册表项HKLM\SYSTEM\CurrentControlSet\Services\KmdfStart的值ImagePa

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

但是,当我使用
net start KmdfStart
再次启动它时,出现了
系统错误2。系统找不到指定的文件
。只有重新启动计算机才有帮助。每次启动和停止,然后尝试启动时,都会发生此问题。该错误将立即显示在控制台中

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


当文件明显存在时,
net start
怎么会出现此错误?

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

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

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


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

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

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

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


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

您是否确保在卸载驱动程序时进行清理(例如,设备创建、符号链接创建等)?忘记做这件事很可能会导致这种行为。@evebr不久前我就发现这就是原因。请写下来作为回答,这样我就可以接受了。但究竟为什么不清理会出现“系统找不到指定的文件”错误?@Eversonevbr DriverEntry在第二次运行时根本没有运行,因为我将DbgPrint(“started”)作为第一行,它只在第一次运行。您确定在卸载驱动程序时进行清理吗(例如,设备创建、符号链接创建等)?忘记这样做可能会导致这种行为。@不朽EVBR我不久前就发现这是原因。请写下来作为答案,这样我就可以接受了。虽然不清理,但到底为什么会出现“系统找不到指定的文件”错误?@不朽EVBR DriverEntry不会在第二次运行,因为我将DbgPrint(“started”)作为第一行,它只在第一次运行。