KMDF ドライバのインストールのトラブルシューティング

最終更新日: 2006年6月26日

カーネル モード ドライバ フレームワーク (KMDF) 1.1 でのドライバのインストール手順に関して問題はないでしょうか。下記では、一般的なエラーと考えられる解決方法、およびドライバのインストールのトラブルシューティングに関する推奨事項をいくつか示します。

*

インストールおよびセットアップのエラー ログ

インストールとセットアップに必要な各コンポーネントの情報は、ログ ファイルに記録されます。これらのログ ファイルをチェックすることで、KMDF とドライバに関する下記のような情報を得ることができます。

KMDF 1.1 のインストール ログ (%windir%\wdf01001inst.log) には、KMDF 1.1 のインストール中に発生したイベントとエラーについての情報が含まれます。

セットアップ アクション ログ (%windir%\setupact.log) には、KMDF co-installer のデバッグ メッセージが含まれます。

SetupAPI ログ (%systemroot%\setupapi.log) には、ドライバがシステムにインストールされるたびに SetupAPI が記録する情報が含まれます。

ログに影響するレジストリ キーを設定することにより、SetupAPI ログの各イベントの情報量を調整できます。より多くの情報が記録されるようにすると、インストールの問題の原因を探す際にとても役立ちます。ドライバのインストール中に発生するエラーは、実際には、デバイス スタックの他の場所に別のドライバをインストールした時のエラーによる可能性があります。そのため、すべてのインストール アプリケーションのログ レベルを上げることが有益なこともあります。

すべてのデバイス インストール プログラムに関して記録される情報量を調整するには、下記のレジストリ サブキーの LogLevel エントリの値をチェックします。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
\Setup

このサブキーが LogLevel エントリに含まれていない場合は、このサブキーを新しい REG_DWORD 値として作成してください。次に、LogLevel エントリの値を、希望のログ レベルに設定します。

記録される情報量を、ドライバのインストール アプリケーションに関してのみ調節するには、下記のレジストリ サブキーの値をチェックします。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
\CurrentVersion\Setup\AppLogLevels

ドライバの詳細ログを有効にするには、インストール アプリケーションと同じファイル名のエントリを作成し、ログ レベルをその名前に割り当てます。下記に例を示します。

MyDriverInstaller = 0x2000FFFF

下記は、最も一般的に使用されるログ レベルです。

0x00000000 では、特別なフラグなしで既定のログが指定されます。

0x00006060 では、最大のメッセージが記録されます。ただし、このレベルでは、適合する INF ファイルの検索に含まれるすべての INF ファイルが記録されるわけではありません。

0x2000FFFF では、すべてが記録されて、各メッセージが書き込まれた後にログ ファイルがディスクにフラッシュされないように指定されます。このレベルは、詳細ログが必要な場合に推奨されます。

一般的な KMDF インストール エラー

インストール中の致命的エラー

複数の問題のいずれかが、このエラーを引き起こす可能性があります。これを解決するには、下記の手順を実行してください。

1.

フリー バージョンの Microsoft Windows のフリーの co-installer、およびチェック バージョンの Windows のチェック用 co-installer を必ず使用してください。

注 :
このメッセージを既に受け取っており、正しい co-installer を使用するように INF を編集済みの場合は、下記のファイルを手動で削除する必要があります。

%windir%\system32\wdfcoinstaller01001.dll

Setup API によってこのファイルが上書きされることはありません。

2.

下記の方法で、Cryptographic Service が動作していることを確認してください。

[マイ コンピュータ] を右クリックして、[管理] をクリックします。

[コンピュータの管理] ダイアログ ボックスで、プラス記号 (+) をクリックして [サービスとアプリケーション] を展開してから、[サービス] をクリックします。

右側の [サービス] パネルで、下方にスクロールし、[Cryptographic Services] をダブルクリックします。

[Cryptographic Services のプロパティ] ダイアログ ボックスの [全般] タブで、[サービスの状態] が [開始] であることを確認してください。

3.

KMDF Version 1.1 では、INF ファイルの Wdf セクションに、KmdfService ディレクティブと KmdfLibraryVersion ディレクティブを 1 つずつのみ含むことができます。これは、KMDF 1.1 のバグであり、後のリリースで修正される予定です。

複数の KMDF ドライバ (関数ドライバやフィルタ ドライバなど) のインストールに単一の INF を使用する場合は、他のドライバに適用する KmdfService ディレクティブと KmdfLibraryVersion ディレクティブをコメント アウトします。たとえば、下記の INF スニペットには 2 つのドライバをインストールするための情報が含まれているため、KmdfService ディレクティブと KmdfLibraryVersion ディレクティブが 2 つずつ含まれています。下記の例では、エラーを解決するために、太字の行をコメント アウトする必要があります。

[ToasterFilter.NT.Wdf]
;KmdfService = DevUpper, DevUpper_wdfsect
KmdfService = wdffeatured, wdffeatured_wdfsect
[DevUpper_wdfsect]
KmdfLibraryVersion = 1.1
;[wdffeatured_wdfsect]
;KmdfLibraryVersion = 1.1

4.

上記の手順で問題が解決しない場合には、KMDF 1.1 のインストール ログ (%windir%\wdf01001inst.log) を参照してください。インストールのトラブルシューティングに役立つ情報が含まれています。

エラー コード 37
このエラーは、co-installer の問題または DriverEntry ルーチン内の問題のどちらかを示しています。

セットアップ アクション ログ (%windir%\setupact.log) に下記メッセージのうちの 1 つが記録されていた場合、そのエラーは、おそらく DriverEntry ルーチン内のエラーが原因で発生しています。

Final status: error(0) The operation completed successfully.

GetLatestInstalledVersion install version major 0x1, minor 0x1 is less than or equal to latest major 0x1, minor 0x1, asking for post processing

WdfCoInstaller: DIF_INSTALLDEVICE: Post-Processing

また、エラー コード 37 は、KMDF 1.0 のドライバから KMDF 1.1 のドライバに更新する際にも発生することがあります。新しいドライバをインストールしようとするときに、既存のドライバが既にメモリにロードされている場合、新しいドライバは、ロード済みの KMDF 1.0 ランタイム ライブラリへの動的なバインドを試みます。バインドは失敗し、システムのイベント ログにエラーが記録されます。システムのイベント ログを参照するには、[スタート] ボタンをクリックし、[コントロール パネル] をクリックします。次に、[管理ツール] をダブルクリックし、[イベント ビューア] をダブルクリックしてから、[システム] をクリックします。

エラー コード 31
このエラーは、常にドライバの問題によるものです。EvtDriverDeviceAdd コールバックが STATUS_SUCCESS を返すことを確認してください。

その他のインストール エラー
インストール中に発生するその他のエラーの原因のほとんどが、セットアップ アクション ログ (%windir%\setupact.log) のエントリから明らかになるはずです。

Co-installer によって、setupact.log ファイルの不正な [Wdf] セクションなどのエラーが報告されます。下記に例を示します。

WdfCoInstaller: ReadComponents: Error Non-existent wdf section
Please refer to the Kmdf samples/documentation to add the Wdf Section

また、setupact.log ファイルには、INF で使用される KMDF のメジャー バージョンとマイナ バージョンも記録されます。下記と類似の行が表示されます。

ReadComponents setting the WdfSection for Driver Service 
Ramdisk using KMDF lib version Major 0x1, minor 0x1

メジャーとマイナーの両バージョンは、1 である必要があります。KMDF 1.1 co-installer (WdfCoInstaller01001.dll) を使用するための INF ファイルを更新しない場合、ログ ファイルには、INF で Version 1.0 が使用されていると示されます。また、1.1 を指定するには、KmdfLibraryVersion ディレクティブを更新する必要があります。

デバイス マネージャが更新された INF ではなく古い INF 使用しているためにインストールが失敗することがあります。この問題は、下記のいずれかの方法で回避してください。

誤った INF を使用できないように、%windir%\inf フォルダから Version 1.0 の oem*.inf ファイルと oem*.pnf ファイルを削除します。

デバイス マネージャが既定のドライバを使用できるようにするのではなく、新しいドライバへの検索パスを指定します。

ユーザーがすべきこと

ログ ファイルで、ドライバのインストールに関する情報をチェックします。

SetupAPI のログのレベルを、ドライバ インストール時の詳細情報が提供されるように設定します。

KMDF のバージョンおよびオペレーティング システム プラットフォームに適した KMDF co-installer を使用します。

適切なバージョンの INF を使用してドライバをインストールします。

KMDF 1.1 で使用される INF ファイルでは、KmdfService ディレクティブと KmdfLibraryVersion ディレクティブを 1 つずつのみ指定します。

KMDF ドライバをライブラリに動的にバインドしているときにエラーが発生しなかったかどうか、システム イベント ログをチェックします。

詳細情報 :

ホワイト ペーパー :
KMDF ドライバを構築、インストール、テスト、およびデバッグする方法の紹介
SetupAPI ログ ファイルを使用した、デバイスのインストールのトラブルシューティング

Windows Driver Kit (WDK):
"フレームワークベース ドライバのインストール"

MSDN:
Using SetupAPI Logging



この情報はお役に立ちましたか?