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



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

主要提示由以下行提供:

#E359未签名或未正确签名的文件"foobar.cat"被阻止(服务器安装(。错误0x800b0110:证书对于请求的用途无效。

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

在WindowsXP时代,微软鼓励开发人员通过将非WHQL驱动程序排除在自动安装之外来认证他们的驱动程序;也就是说,当用户插入你的设备时,他会得到"添加新硬件"向导,即使驱动程序已经准备好了(例如在驱动程序商店中(。这一切都与所谓的签名分数有关。

虽然用户可以应用忽略签名失败的策略,但它仅适用于"客户端安装"(即交互式(。尽管如此,Windows XP上的"服务器安装"对WHQL的要求是无可救药的。(*(

在我的情况下,解决方法是从常规进程中调用SetupCopyOEMInf,这将导致以下(成功(消息:

#E361将安装未签名或未正确签名的文件"foobar.cat">(策略=忽略(。错误0x800b0110:证书对于请求的用途无效。

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

最新更新