我们开发了一个驱动程序,并使用我们公司的Verisign签名(SHA1 + SHA256,包括证书链)签署了cat和sys文件。我们在Windows 7和10下测试了32位和64位版本。现在我们有一些随机客户报告我们的设备在设备管理器中无法正确识别,并且错误52显示:
Windows无法验证此设备所需驱动程序的数字签名。最近的硬件或软件更改可能安装了错误或损坏的文件,或者可能是来自未知来源的恶意软件。 (代码52)
Setupapi.dev.log显示此错误:
_! dvi:设备未启动:设备出现问题:0x34(CM_PROB_UNSIGNED_DRIVER),问题状态:0xc0000428
但是Setupapi.dev.log中的此消息也存在于工作安装中。
签名工具显示签名有效,与Windows资源管理器上的属性页面相同。
这种行为的原因是什么?
对此有潜在的解决方案是not dual signing the cat file和checking the root certs of the customer's pcs。我还了解到setupapi.dev.log is perfectly normal中的错误消息
经过一些研究与很多明显矛盾的微软文档后,我终于登陆https://docs.microsoft.com/windows-hardware/drivers/install/kernel-mode-code-signing-policy--windows-vista-and-later-,它说:
“注意:从Windows 10版本1607开始,Windows将不会加载任何未由Dev Portal签名的新内核模式驱动程序。
[...]
如果满足以下任何条件,仍允许使用交叉签名的驱动程序:
PC从早期版本的Windows升级到Windows 10版本1607。
安全启动在BIOS中关闭。
驱动程序签署了2015年7月29日之前颁发的终端实体证书,该证书链接到受支持的交叉签名CA.“
事实证明,在我们的所有测试机器上都没有启用安全启动,而是在遇到问题的客户机器上启用了安全启动。
现在我们必须使用驱动程序执行WHQL认证。幸运的是,有些公司将此作为服务提供,因此我们无需维护认证机器池。