0

Microsoft が推奨する手順に従って、 SetupCopyOEMInfを使用して 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 でこれが失敗するのはなぜですか?

4

2 に答える 2

3

2 週間の調査とデバッグの後、問題はデバイス クラス GUIDにあることが判明しました。

INF を最小限に抑え、Windows 8.1 に適切にプレインストールされた別の INF と比較したところ、2 つの違いはクラス GUID だけであることがわかりました。簡単に検索ff646f80-8def-11d2-9449-00105a075f6bたところ、1000 を超えるヒットが見つかりました。一意の識別子から見たいものとは正確には異なります。

その後、 12 年間のバージョン管理を振り返ると、最初にデバイス ドライバーを作成した担当者が、ウィザードで生成された INF の GUID を Win2K DDK から変更していないことがわかりました。

新しい一意のクラス 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}
于 2013-10-09T15:04:25.480 に答える
0

私の以前の答えは、実際には少し赤いニシンでした。 サンプル INF で GUID を使用するべきではありませんが、本当の問題はインストーラーにありました。結局のところ、私たちのインストールは、クラスのレジストリ キーを事前に作成しようとしていました。

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

これをインストーラーから削除すると、問題が解決しました。

Microsoft は、以前のバージョンの Windows から内部でドライバーのプレインストールがどのように機能するかを変更したに違いありません。

于 2013-10-11T13:41:03.447 に答える