很抱歉长度,但我希望得到尽可能多的细节。
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。 INF
它在模型下显示“我自己的设备”,并说“此驱动程序具有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错误的原因吗?为什么我得到这个,Verisign不受信任吗?
编辑 - 如果我这样做
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\signtool" verify /v /pa myfile.cat
......我得到“成功验证”
从Windows 10(版本1607)开始,内核模式驱动程序必须由Microsoft签名。 也可以看看:
在Windows 10中,使用内核模式驱动程序框架重写了驱动程序,从而提高了驱动程序的整体稳定性。
我认为您的驱动程序需要由Microsoft签名。 当我安装没有Microsoft签名的驱动程序时,我遇到了同样的错误(代码52)。