对长度感到抱歉,但我想尽可能多地了解细节。
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
...我得到“成功验证”