2

我的公司制造了一个通过 USB 连接到 PC 并用于使用 Windows 内置 USB HID 驱动程序的测量设备。我现在使用不同的驱动程序来控制设备,并且我正在为许多 Windows 版本签署这些驱动程序。原因是我们希望我们的客户能够安装我们的测量软件(将预安装这些新驱动程序),插入我们的测量设备,并获得 Windows 信任并使用我们的新驱动程序来支持内置 USB HID司机。每次连接设备时,无论使用什么 USB 端口,或者如果用户连接的设备在描述符中具有不同的序列号,它还会带来额外的好处。

我已通读并执行 Microsoft 编写的 KMCS_Walkthrough 中概述的步骤,通过从 inf 文件为 Windows 7 x64 创建目录文件并使用自签名证书对目录文件进行签名来执行此驱动程序的测试签名。重新启动到测试模式时,Windows 7 x64 机器上的事情似乎运行顺利。令我吃惊的是,我能够创建一个 XP_x86 目录文件,用我的测试证书对其进行签名,将我的测试证书导入受信任的根存储,并在 Windows XP 机器上获得我想要的驱动程序行为。默认驱动程序签名策略设置为默认值(警告 - 每次都提示我选择一个操作)。

我很惊讶,因为我一直在阅读的所有关于签署驱动程序以供 XP 公开发布的 MSDN 文档似乎都对经过 WHQL 认证的驱动程序有严格的立场,以便驱动程序得到完全信任,而不是获取代码-从第三方签署证书并使用它来签署驱动程序。这不是真的吗?我的自签名驱动程序在 Windows XP 中的排名如何超过内置 USB HID 驱动程序?

4

2 回答 2

1

我觉得你的经历很正常。

在我的公司,我们已经向 Windows XP 用户分发了 USB 驱动程序,而且我们无需对它们进行签名即可安装它们。我们后来开始自己签名,但这并没有真正影响 Windows XP 的用户体验。

我们的驱动程序通常是仅 INF 或他们使用 WinUSB,因此如果您正在编译二进制驱动程序,这可能与您不同。

如果没有 WHQL 签名,Windows XP 用户仍然可以安装您的驱动程序包,只要他们单击此警告:

在此处输入图像描述

安装驱动程序包后,根据我的经验,没有什么可以阻止它包含的内核模块被加载到内核中。但是,我们的用户在第一次将新设备插入他们的计算机时总是必须通过“找到新硬件向导”。

也许您的驱动程序的排名高于 HID 驱动程序,因为您选择了更具体的标识符字符串(即其中包含供应商 ID 和产品 ID 的字符串)。

有关更多信息,我建议阅读我的文章:实用 Windows 代码和驱动程序签名

于 2014-02-19T17:10:36.623 回答
0

经过大量的试验、错误和研究,我终于得出了一个结论。

我最初问题的关键是我使用的是自签名证书。我使用 makcert 并按照 KMCS_Walkthrough 中的示例在 Windows 中生成了自签名证书:

makecert -r -pe -ss PrivateStore -n CN=CompanyName MyCertificate.cer

不包括指定证书应该对哪些增强型密钥使用 (EKU) 有效的参数 (-eku)。我不知道的是,如果缺少这个参数,这会创建一个包含所有 EKU 的自签名证书。最值得注意的是名为“Windows 系统组件验证 (1.3.6.1.4.1.311.10.3.6)”的 EKU。此 EKU 包含在 WHQL 签名的证书中。

所以,事实上,Windows XP 的行为是恰当的。我的驱动程序确实是 WHQL 签名的,它只是使用了一个自签名的 WHQL 证书。

于 2014-07-17T14:15:28.000 回答