次の方法で共有


リフレクターがホスト プロセスを終了した理由の特定

このトピックでは、リフレクターがドライバー ホスト プロセス (WUDFHost.exe) を終了した理由、またはドライバー ホスト プロセスがクラッシュした理由を分析する方法について説明します。

リフレクタがホスト プロセスを終了する最も一般的な理由は、UMDF ホスト プロセスタイム アウトの有効期限です。

テスト システムにアタッチされたカーネル デバッガーを使用して UMDF ドライバーのすべての開発とテストを行い、WUDFHost.exe でアプリケーション検証ツール (AppVerif.exe) を有効にすることを強くお勧めします。 次のコマンドを使用してデバッガーをアタッチし、再起動します。

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe

ダンプ ファイルの使用

UMDF ドライバーがクラッシュしたり、問題が発生したりすると、カーネル デバッガーで中断が報告されます。 カーネル デバッガーでユーザーモードの例外が報告される場合は、これらの問題をデバッグする必要があります。 カーネル デバッガーの中断は、問題のある (応答しない) UMDF ドライバーが原因でドライバー ホスト プロセスを終了する前に、WudfRd.sysによっても報告されます。 ログとヒープ ダンプも、次の場所に報告されます。 UMDF によってキャプチャされたダンプ ファイルを確認するには、次の手順に従います。

  1. %ProgramData%\Microsoft\WDF ディレクトリで最新の .dmp ファイルを見つけます。 Windows 10 1507 に付属している UMDF 2.15 より前のログ ディレクトリは %windir%\system32\LogFiles\WUDF の下にあります。

  2. 次のコマンドを使用して、最新の .dmp ファイルをデバッガーに読み込みます。

    WinDbg -z <path to the .dmp file>
    
  3. 終了時のスレッドの状態を見てください。

ヒープ ダンプをキャプチャする必要がある場合は、テスト時に次のレジストリ値を設定し、テストを実行する前にテスト システムを再起動します。 システムのアプリケーション イベント ログ (%SystemRoot%\System32\Winevt\Logs\Application.evtx) から Windows エラー報告履歴を調べることもできます。

reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogMinidumpType /t REG_DWORD /d 0x1122
reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogEnable /t REG_DWORD /d 1 

デバッガーの使用

それ以外の場合は、リフレクターがホスト プロセスを終了した理由を判断するために、ライブ カーネルモード ターゲットにアタッチする必要がある場合があります。 デバッグ セッションを設定するには、「UMDF ドライバーのデバッグを有効にする方法」で説明されている手順に従います。

接続を確立したら、!wdfkd.wdfumtriage を使用して UMDF ドライバーを調べ、!wdfkd.wdfumirps UMDF デバッガー拡張機能 (UMDF バージョン 1 では !wudfext.umirps) を使用して未処理の IRP を表示します。

  • PnP IRP または電源 IRP が保留中の場合は、ホスト プロセスのスレッドを調べることによって、ドライバーにより IRP がハングする理由を決定します。

    !process 拡張機能を使用して、ホスト プロセスで実行されているスレッドを調べることができます。 フラグの値 0x1f は、各スレッドのスタック トレースを表示します。

    !process <process addr> 0x1f

  • ドライバーが取り消された IRP をすぐに完了していない場合は、取り消された IRP と、それが完了していない理由を判断します。

  • IRP のクリーンアップまたはクローズが保留中の場合は、IRP が処理に長い時間がかかっている理由を判断します。