次の方法で共有


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 forcedecodeuserlmu を使用して、ドライバーが現在のプロセスでホストされていることを確認します。

  • スレッド呼び出し履歴 (!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 ソフトウェア トレースの使用」を参照してください。