我的服务正在调用SetupCopyOEMInf
以安装 Authenticode但不是 WHQL签名的 INF 文件。SetupCopyOEMInf
正在返回CERT_E_WRONG_USAGE
(0x800B0110) 并且未安装 INF 文件。
1 回答
此行提供了主要提示:
#E359 未签名或签名错误的文件“foobar.cat”被阻止(服务器安装)。错误 0x800b0110:证书对于请求的用途无效。
注意服务器安装——这是 SetupAPI 所说的“无人值守安装”。大多数情况下,当您插入具有签名设备驱动程序的设备(在 Windows XP 中,只有 WHQL 签名)并自动安装(带有被动信息气球让您知道)时,就会发生这种情况。
在 Windows XP 时代,微软鼓励开发人员通过将非 WHQL 驱动程序排除在自动安装之外来对其驱动程序进行 WHQL 认证;也就是说,当用户插入您的设备时,即使驱动程序已准备好(例如在驱动程序商店中),他也会得到“添加新硬件”向导。这与所谓的签名分数有关。
虽然用户可以应用策略来忽略签名失败,但它仅适用于“客户端安装”(即交互式)。好像是尽管如此,Windows XP 上的“服务器安装”对 WHQL 的要求是无可救药的。(*)
就我而言,解决方法是SetupCopyOEMInf
从常规进程调用,这会导致以下(成功)消息:
#E361 将安装未签名或未正确签名的文件“foobar.cat” (Policy=Ignore)。错误 0x800b0110:证书对于请求的用途无效。
(*) 实际上,不仅仅是 WHQL - 任何具有此"Windows System Component Verification" (1.3.6.1.4.1.311.10.3.6)
目的的证书都可以。Authenticode 证书不是一个。