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



我们有一些驱动程序包,我们按照Microsoft建议的过程,在Windows上的驱动程序存储区中预装了SetupCopyOEMInf。 这个过程已经正常工作多年;在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:WindowsSystem32DriverStoreFileRepository[ourinfname].inf_x86_3361fc76cd85b678[ourinfname].inf'. Error = 0x00000002

我已经翻阅了文档,试图找出我们做错了什么。

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

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

为什么这在 Windows 8.1 上失败了?

经过两周的挖掘和调试,事实证明问题出在我们的设备类 GUID 上。

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

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

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

我不知道Microsoft是否专门阻止了使用该 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}

我之前的回答实际上有点红鲱鱼。 虽然绝对不应该在示例 INF 中使用 GUID,但真正的问题最终出在我们的安装程序上。 事实证明,我们的安装试图为类预先创建注册表项:

HKLMSYSTEMCurrentControlSetControlClass{FF646F80-8DEF-11D2-9449-00105A075F6B}

从我们的安装程序中删除它解决了这个问题。

Microsoft必须已更改以前版本的 Windows 驱动程序预安装的工作方式。

相关内容

  • 没有找到相关文章

最新更新