Win10 1709+VS2017开发WDM驱动启动失败(错误2)及依赖缺失求助
作为经常处理驱动开发问题的开发者,我来帮你拆解这个问题的核心原因和可行的解决办法:
先澄清一个关键误解:Dependency Walker的结果是误报
Dependency Walker是为用户态程序设计的工具,它无法正确识别内核驱动的依赖关系。那些显示“缺失”的sys/dll文件,其实是Windows内核自带的系统模块,根本不需要你手动下载——你完全可以忽略这个工具的结果,把注意力放在启动失败的真正原因上。
错误2的核心原因:系统找不到驱动文件
[SC] StartService FAILED 2 对应的系统错误是ERROR_FILE_NOT_FOUND,也就是系统找不到你指定的驱动文件。问题出在sc create命令的binpath参数上:
- 你写的
binpath= mydriver1.sys是相对路径,系统会默认到C:\Windows\System32目录下查找,而你的驱动文件显然不在那里。 - 正确的做法是使用绝对路径,并且注意
binpath=后面必须保留一个空格,路径如果包含空格的话要加引号。
比如你的驱动输出在C:\DriverProjects\MyDriver\x64\Debug目录下,命令应该写成:
sc create mydriver binpath= "C:\DriverProjects\MyDriver\x64\Debug\mydriver1.sys" type= kernel
额外需要注意的Win10驱动加载限制
Win10 1709版本默认启用了驱动强制签名,未签名的内核驱动是无法被系统加载的,这也是常见的启动失败原因,你需要做这两步:
- 开启测试模式:以管理员身份打开命令提示符,执行:
执行后重启电脑,右下角会出现“测试模式”的水印,这时候系统允许加载测试签名的驱动。bcdedit /set testsigning on - 给驱动添加测试签名:
- 在VS2017的项目属性中,找到「链接器 -> 输入」,勾选「延迟签名」,并指定你的测试证书(如果没有证书,可以用VS自带的工具生成:打开Developer Command Prompt,执行
makecert -r -pe -ss PrivateCertStore -n CN=YourName testcert.cer)。 - 或者在编译后,用
signtool给驱动签名:signtool sign /s PrivateCertStore /n YourName mydriver1.sys。
- 在VS2017的项目属性中,找到「链接器 -> 输入」,勾选「延迟签名」,并指定你的测试证书(如果没有证书,可以用VS自带的工具生成:打开Developer Command Prompt,执行
最后验证步骤
- 先删除之前创建的错误服务:
sc delete mydriver - 用正确的绝对路径重新创建服务,然后启动:
sc create mydriver binpath= "C:\你的驱动绝对路径\mydriver1.sys" type= kernel sc start mydriver
如果还是启动失败,建议打开事件查看器(Win+X -> 事件查看器),查看「Windows日志 -> 系统」中的错误日志,里面会有更详细的失败原因,比如驱动本身的代码错误、平台不匹配(比如编译了32位驱动但系统是64位)等。
内容的提问来源于stack exchange,提问作者TBD
相关产品推荐
相关产品推荐

