UMDF 2.0 ドライバーのクラッシュのトラブルシューティング
ユーザーモード ドライバー フレームワーク (UMDF) バージョン 2 以降では、Wdfkd.dll に実装されているデバッガー拡張機能コマンドのサブセットを使用して、UMDF ドライバーをデバッグできます。 この記事では、UMDF ドライバーの問題のトラブルシューティングに使用できるコマンドについて説明します。
UMDF 2.0 ドライバーがクラッシュした理由の特定
ドライバーのホスト プロセスが終了した場合、ホストのタイムアウトしきい値を超える結果になるドライバーのコールバックで問題が発生する可能性があります。 この場合、リフレクタはドライバー ホスト プロセスを終了します。
調査するには、「UMDF ドライバーのデバッグを有効にする方法」の説明に従って、まずカーネル モード デバッグ セッションを設定します。 テスト システムにアタッチされたカーネル デバッガーを使用して UMDF ドライバーのすべての開発とテストを行い、WUDFHost.exe でアプリケーション検証ツール (AppVerif.exe) を有効にすることを強くお勧めします。 次のコマンドを使用してデバッガーをアタッチし、再起動します。
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
HostFailKdDebugBreak が設定されている場合、タイムアウトしきい値を超えると、リフレクタはカーネルモード デバッガーにブレークします。 デバッガーの出力には、選択できるリンクなど、開始方法に関するいくつかの提案が表示されます。 次に例を示します。
**** Problem detected in UMDF driver "WUDFOsrUsbFx2". !process 0xFFFFE0000495B080 0x1f, !devstack 0xFFFFE000032BFA10, Problem code 3 **** **** Dump UMDF driver image name and stack: !wdfkd.wdfumdevstack 0x000000BEBB49AE20 **** Dump UM Irps for this stack: !wdfkd.wdfumirps 0x000000BEBB49AE20 **** Dump UMDF trace log: !wmitrace.logdump WUDFTrace **** Helpful UMDF debugger extension commands: !wdfkd.wdfhelp **** Note that driver host process may get terminated if you go past this break, making it difficult to debug the problem!
!analyze を使用して、エラーに関する情報や、試すことができるその他の UMDF 拡張機能コマンドを表示します。 このコマンドは、UMDF 検証ツールのエラーまたは UMDF の未処理の例外に役立ちます。 これは、ライブ カーネル デバッグや、%ProgramData%\Microsoft\WDF のユーザー クラッシュ ダンプ ファイルのデバッグに使用できます。
!process 0 0x1f wudfhost.exe を使用して、スレッド スタック情報を含むすべてのWudfhost.exe ドライバー ホスト プロセスを一覧表示します。
また、!wdfkd.wdfumtriage と !wdfkd.wdfldr を使用して、現在 WDF にバインドされているすべてのドライバーを表示することもできます。 UMDF ドライバーのイメージ名を選択すると、デバッガーはホスト プロセスのアドレスを表示します。 その後、プロセス アドレスを選択して、そのプロセスに固有の情報を表示できます。
必要に応じて、.process /r /p Process を使用して、プロセス コンテキストを、ドライバーをホストしている Wudfhost プロセスのプロセス コンテキストに切り替えます。 .cache forcedecodeuser と lmu を使用して、ドライバーが現在のプロセスでホストされていることを確認します。
スレッド呼び出し履歴 (!thread Address) を調べて、ドライバーのコールバックがタイムアウトしたかどうかを判断します。スレッドのティック数を調びます。 Windows 8.1 では、リフレクターは 1 分後にタイムアウトします。
!wdfkd.wdfdriverinfo MyDriver.dll 0x10 を使用して、デバイス ツリーを詳細な形式で表示します。 次に、!wdfdevice を選択します。 このコマンドは、電源、電源ポリシー、およびプラグ アンド プレイ (PnP) 状態の詳細な情報を表示します。
保留中の IRP を検索するには、!wdfkd.wdfumirps を使用します。
ドライバーのキューの状態をチェックするには、!wdfkd.wdfdevicequeues を使用します。
カーネルモード デバッグ セッションでは、!wmitrace.logdump WudfTrace を使用してトレース ログを表示できます。
UMDF 2.0 IFR ログの表示
カーネルモード デバッグ セッションで、!wdfkd.wdflogdump 拡張機能コマンドを使用して、Windows Driver Frameworks (WDF) インフライト レコーダー (IFR) ログ レコード (使用可能な場合) を表示できます。
メモリ ダンプ ファイルの検索
ユーザーモード・ダンプ・ファイルの検索については、「リフレクターがホスト・プロセスを終了した理由の判別」を参照してください。 ミニダンプ ファイルに格納されている情報の種類を指定する LogMinidumpType レジストリ値を設定する方法については、「UMDF ドライバーでの WPP ソフトウェア トレースの使用」を参照してください。