在Windows 8.1上预安装驱动程序失败

时间:2013-10-09 15:04:25

标签: guid drivers windows-8.1 wdk inf

我们在SetupCopyOEMInf之后使用Microsoft's suggested procedures在Windows上的驱动程序存储区中预安装了一些驱动程序包。这个过程多年来一直运作良好; XP,Vista,7甚至8都没有问题。

在评估Windows 8.1 RTM时,我们发现我们的驱动程序不再预先安装。

检查setupapi.dev.log,我发现:

!!!  sto:                Failed to query boot critical status of device class. Error = 0x00000002

以后:

!!!  idb:                Failed to query inbox status of device class {ff646f80-8def-11d2-9449-00105a075f6b}. Error = 0x00000002
!!!  idb:                Failed to publish 'C:\Windows\System32\DriverStore\FileRepository\[ourinfname].inf_x86_3361fc76cd85b678\[ourinfname].inf'. Error = 0x00000002

我倾注了文档,试图找出我们做错了什么。

使用pnputil.exe -a或使用InstallScript的DIFxDriverPackagePreinstall()从命令行进行预安装会产生相同的结果。

如果我们不尝试将它们放在驱动程序存储区中,则驱动程序可以在Windows 8.1上运行。如果我们将已经安装了驱动程序的Windows 8计算机升级到Windows 8.1,预安装也会有效。在任何一种情况下,一旦它正在工作,它就会继续工作。

为什么在Windows 8.1上失败?

2 个答案:

答案 0 :(得分:3)

经过两周的挖掘和调试后,发现问题出在我们的设备类GUID上。

在将我们的INF剥离到最低限度并与在Windows 8.1上正确预安装的另一个INF进行比较之后,我意识到两者之间的唯一区别是类GUID。我为ff646f80-8def-11d2-9449-00105a075f6b快速search并且发现了超过一千次点击;不完全是您想要从唯一标识符中看到的内容。

然后我回顾了 12年的版本控制,发现负责最初创建设备驱动程序的人没有更改向导生成的INF中的GUID Win2K DDK

创建一个新的唯一类guid解决了这个问题,我们的驱动程序在Windows 8.1上正确预安装。

我不知道微软是否特意阻止了使用该GUID的预安装尝试,但最重要的是:如果一个例子说要更改GUID, 更改它!

以下是完整性的示例代码。不要这样做:

;; *********  PLEASE READ ***********
;; The wizard cannot create exact INF files for all buses and device types.
;; You may have to make changes to this file in order to get your device to
;; install. In particular, hardware IDs and logical configurations require
;; intervention.
;;
;; The Win2K DDK documentation contains an excellent INF reference.

;--------- Version Section ---------------------------------------------------

[Version]
Signature="$Windows 95$"
Provider=%ProviderName%

; If device fits one of the standard classes, use the name and GUID here,
; otherwise create your own device class and GUID as this example shows.

Class=NewDeviceClass
ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b}

答案 1 :(得分:0)

我的previous answer实际上有点像红鲱鱼。 虽然在样本INF 中绝对不应该使用GUID,但REAL问题最终出现在我们的安装程序中。事实证明,我们的安装试图为该类预先创建注册表项:

HKLM\SYSTEM\CurrentControlSet\Control\Class\{FF646F80-8DEF-11D2-9449-00105A075F6B}

从我们的安装程序中删除它可以解决问题。

Microsoft必须更改驱动程序预安装在以前版本的Windows下的工作原理。