首页 > 解决方案 > 从签名的驱动程序接收错误(代码 52)

问题描述

对长度感到抱歉,但我想尽可能多地了解细节。

TL;DR:我使用signtool& Verisign 签名的驱动程序文件在安装时仍然出现 Code 52 错误。

我已经为使用 usbser.sys 驱动程序文件的设备创建了一个 INF 文件,但是即使我已经对其进行了签名,我也无法在目标机器上安装它,尤其是出现以下错误。 ..

Windows 无法验证此设备所需驱动程序的数字签名。最近的硬件或软件更改可能安装了签名不正确或损坏的文件,或者可能是来自未知来源的恶意软件。(代码 52)

我使用在这里找到的示例文件创建了 INF 文件... https://gist.github.com/tracernz/26a5c4343cec83462fed

我对其进行了一些更改,但我不想粘贴到整个文件中。以下是一些要点...

[Version]
Signature="$Windows NT$"
DriverPackageType = PlugAndPlay
DriverPackageDisplayName = %Device%
Class=Ports
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318}
Provider=%Provider%
CatalogFile=myfile.cat
DriverVer=07/16/2016,10.0.14393.0

[Manufacturer]
%Provider% = UsbDevice, NTamd64

[UsbDevice.NTamd64]
%Device% = Usb_Install, USB\VID_2102&PID_0003\5&2E3CC8B3&0&8

[Strings]
Provider = "MyCompany Ltd."
Device = "My Own Device"

(我还删除了该行GenericDriverInstalled,,,,1,因为 INFVERIF 因此引发了错误,并且我在网上找不到任何解释它应该做什么或如何修复错误的内容)

目标机器是 64 位 Windows 10 IoT Enterprise。

所以我用 inf2cat ( /os:10_X64) 创建了我的 cat 文件 - 没有报告错误(“目录生成完成”)

然后我用这个命令签署 cat 文件:

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" sign /f ..\MyCertificate.pfx /p MyPassword /t http://timestamp.verisign.com/scripts/timstamp.dll /v myfile.cat

这被报告为成功。

然后我将包含 myfile.inf、myfile.cat 和 usbser.sys 的目录复制到我的目标机器上。

在这台机器上,如果我查看设备管理器,我会看到我的设备,但名称不正确%UNWANTED_CDC_NAME% (COM4)- 我不确定这是从哪里来的。上面 INF 文件中的USB\VID_2102&PID_0003\5&2E3CC8B3&0&8与此设备的设备实例路径相同。

我跑pnputil \add-driver myfile.inf了,一个对话框问我是否信任出版商,我同意,并报告成功。

但是在设备管理器中,我的设备并没有像我预期的那样将其名称更改为“我自己的设备”!

所以我右键单击我的设备,“更新驱动程序软件”,“浏览我的计算机以查找驱动程序软件”,“让我从计算机上的设备驱动程序列表中选择”,“从磁盘安装...”并选择 myfile。信息

它在模型下显示“我自己的设备”,并显示“此驱动程序具有 Authenticode(tm) 签名”。

但是当我单击“下一步”时,我收到一条错误消息,提示“不建议安装此设备驱动程序,因为 Windows 无法验证它是否与您的硬件兼容。” 我单击“是”继续安装,然后“Windows 已成功更新您的驱动程序软件”,但需要重新启动。

所以我同意重启并看到我的设备现在有正确的名称,但带有黄色感叹号。我查看了属性,并在此问题的顶部看到了 Code 52 错误。

另一个细节——我当时回去signtool用来验证签名。

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v myfile.cat

我在“签名证书链”中得到一个以 Verisign 开头的证书列表和一个以 Thawte Timestamping CA 开头的时间戳列表,但随后出现错误消息:

SignTool 错误:已处理证书链,但在信任提供者不信任的根证书中终止。

这是 Code 52 错误的原因吗?为什么我得到这个,威瑞信不可信吗?

编辑- 虽然如果我这样做

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v /pa myfile.cat

...我得到“成功验证”

标签: driversigningwindows-10-iot-enterprise

解决方案


从 Windows 10(版本 1607)开始,内核模式驱动程序必须由 Microsoft 签名。
也可以看看:

在 Windows 10 中,驱动程序已通过使用内核模式驱动程序框架进行了重写,从而提高了驱动程序的整体稳定性。

我认为您的驱动程序需要由 Microsoft 签名。
当我安装没有 Microsoft 签名的驱动程序时,我遇到了同样的错误(代码 52)。


推荐阅读