Usb 使用Vista和更高版本方法签名的Windows驱动程序在XP中安装良好,但它不应该';T

Usb 使用Vista和更高版本方法签名的Windows驱动程序在XP中安装良好,但它不应该';T,usb,windows-xp,driver,hid,driver-signing,Usb,Windows Xp,Driver,Hid,Driver Signing,我的公司制造了一个测量设备,通过USB连接到PC,并用于使用Windows机箱内USB HID驱动程序。我现在使用另一个驱动程序来控制设备,我正在为许多Windows版本的驱动程序签名。原因是我们希望我们的客户能够安装我们的测量软件(预安装这些新驱动程序),插入我们的测量设备,并获得Windows信任,并使用我们的新驱动程序来支持机箱内USB HID驱动程序。无论使用什么USB端口,或者如果用户连接的设备在描述符中具有不同序列号,每次连接设备时都会使用此新驱动程序,这也会带来额外的好处 我已经阅

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

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


我很惊讶,因为我一直在阅读的所有MSDN文档中关于为XP公开发行版签署驱动程序的内容似乎都对经过WHQL认证的驱动程序持严格的立场,以使驱动程序得到完全信任,而不是从第三方获得代码签名证书并使用该证书来签署驱动程序。这不是真的吗?在Windows XP中,我的自签名驱动程序怎么能排在机箱内USB HID驱动程序的前面呢?

我认为您的体验是正常的

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

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

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

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

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


要了解更多信息,我建议阅读我的文章。

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

我最初问题的关键是我使用的是自签名证书。我在Windows中使用makcert生成了自签名证书,并遵循KMCS_演练中的示例:

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


因此,事实上,Windows XP的运行是正常的。我的驱动程序确实是WHQL签名的,它只是一个使用的自签名WHQL证书。

嗨,大卫。有趣的是,你的回复是因为我在这里发布之前刚刚阅读了你的文章(以及1000页的MSDN文章和谷歌搜索)。我的司机也只是INF。您是如何开始安装仅限INF的驱动程序的?我之所以这样问,是因为我之前试图超越机箱内USB HID驱动程序的尝试没有成功。因此,我可以安装一个驱动程序实例,但如果我切换USB端口或在描述符中交换具有不同序列号的单元,它将无法坚持。我使用DPInst和Devcon得到了相同的结果。我们的INF文件有一个DefaultInstall部分,允许用户通过右键单击并选择“安装”来安装它们。但是现在我们有很好的安装程序,可以将驱动程序包(INF和相关文件)复制到硬盘上,并从我们编写的Win32 DLL调用SetupCopyOEMInf。我从不需要对驱动程序进行排名,因为我们的设备没有尝试成为某个标准类。需要注意的是,在用户完成“查找新硬件”向导后,Windows会记住结果,并且在设备插入时不会使用任何新的驱动程序。所以,也许你需要告诉Windows更新设备的驱动程序软件?或者在尚未学会使用错误驱动程序的新安装的Windows XP上试用?我们的USB设备设计为符合HID类。因此,当我将其连接到Windows XP机器时,机箱内USB HID驱动程序(源自input.inf)将始终获胜,除非在设备连接时(当时已绑定到机箱内USB HID驱动程序),通过我创建的inf(使用设备管理器、Devcon或DPInst)手动安装。因此,我们的目标是让我们的新驱动程序获胜,这样无论何时/如何/为什么连接,Windows XP都会喜欢它而不是HID驱动程序。XP完全信任我的自签名驱动程序包,我想我有点惊讶。