我的服务正在调用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证书不是。