签名Windows x64驱动后加载提示「系统找不到指定文件」求助
排查驱动签名后加载提示「系统找不到指定文件」的问题
结合你用SafeNet EV令牌签名驱动的场景,我整理了几个核心排查方向,帮你定位问题:
1. 先检查签名命令的参数是否匹配
你当前的命令里用了/sha1 my_sha256_hash,这里很可能踩了坑:/sha1参数要求填写的是证书的SHA1指纹,而不是证书的算法哈希类型(哪怕你的证书是SHA256 EV的)。如果填成SHA256哈希,signtool会找不到对应的证书,导致签名不完整,驱动实际没有被正确签名,系统加载时就会抛出模糊的“找不到文件”错误。
解决方法:
- 打开证书管理器(针对你的SafeNet令牌),找到那张SHA256 EV证书,查看它的SHA1指纹(在证书详情的“指纹”字段里,注意去掉空格)
- 替换命令里的
my_sha256_hash为这个SHA1指纹;或者干脆去掉/sha1参数,因为你已经用/n "my_company"指定了证书主体,只要令牌里只有对应公司的EV证书(或者系统优先匹配SHA256的),也能正确选中目标证书。
2. 确认SafeNet令牌的访问权限和签名完整性
EV签名依赖令牌的私钥访问,这几个细节容易被忽略:
- 必须用管理员权限运行命令提示符!驱动签名需要修改文件的数字签名属性,普通权限可能导致签名不完整。
- 签名过程中有没有弹出SafeNet令牌的PIN码输入窗口?如果弹窗被后台程序挡住,签名会静默失败,驱动文件相当于没被签名,系统加载时自然会报错。可以打开SafeNet Authentication Client,确保令牌状态正常,签名时主动留意PIN码提示。
3. 验证签名有效性,排查系统驱动策略
用signtool自带的验证命令,先确认签名是否真的成功:
signtool verify /v /pa mydriver.sys
查看输出里的细节:
- 有没有提示“签名有效”?如果有证书链不完整的错误,需要用
/ac参数指定EV证书的中间证书文件(有些SafeNet令牌会自动包含中间链,但如果没有的话需要手动导入)。 - 时间戳是否有效?你的命令用了Verisign的时间戳服务器,这个是没问题的,但要确保时间戳成功写入。
- 另外,Windows 10/11的新版本默认要求驱动必须有SHA256签名+有效时间戳,且未处于测试模式的话,未通过验证的驱动会被系统阻止加载,此时系统可能会用“找不到文件”来掩盖签名验证失败的真实原因。如果是测试环境,可以先启用测试模式(
bcdedit /set testsigning on,重启生效)再尝试加载。
4. 排查文件路径和权限问题
虽然Depends检查驱动无异常,但加载时的实际路径和权限可能有问题:
- 确保加载驱动时指定的路径和你签名的
mydriver.sys路径完全一致,避免指向未签名的副本。 - 尝试把签名后的驱动复制到
C:\Windows\System32\drivers目录(管理员权限操作),再加载试试,这个目录是系统默认的驱动目录,权限配置更规范。
内容的提问来源于stack exchange,提问作者user1341970




