Windows XP SetupAPI拒绝从服务安装非WHQL签名的.INF

时间:2014-04-30 18:48:25

标签: windows windows-xp authenticode setupapi

我的服务正在调用SetupCopyOEMInf来安装Authenticode 但不是WHQL 已签名的INF文件。 SetupCopyOEMInf返回CERT_E_WRONG_USAGE(0x800B0110)并且未安装INF文件。

1 个答案:

答案 0 :(得分:1)

主要提示由此行提供:

  

#E359未签名或错误签名的文件“foobar.cat”被阻止(服务器安装)。错误0x800b0110:证书对请求的用法无效。

请注意服务器安装 - 这是SetupAPI - 代表“无人参与安装”。大多数情况下,当您插入一个已签名设备驱动程序的设备(在Windows XP中,只有WHQL签名)并自动安装(使用被动信息气球让您知道)时会发生这种情况。

在Windows XP时代,微软鼓励开发人员通过从自动安装中排除非WHQL驱动程序来对其驱动程序进行WHQL认证;也就是说,当用户插入您的设备时,即使驱动程序已准备好(例如在驱动程序存储区中),他也会获得“添加新硬件”向导。这与所谓的signature scores

有关

虽然用户可以应用策略来忽略签名失败,但它仅适用于“客户端安装”(即交互式)。好像很讨厌,Windows XP上的“服务器安装”无法满足WHQL要求。(*)

在我的情况下,解决方法是从常规流程调用SetupCopyOEMInf,这会产生以下(成功)消息:

  

#E361将安装未签名或错误签名的文件“foobar.cat”(策略=忽略)。错误0x800b0110:证书对请求的用法无效。

(*)实际上,不仅仅是WHQL - 任何具有"Windows System Component Verification" (1.3.6.1.4.1.311.10.3.6)目的的证书都可以。 Authenticode证书不是一个。