次の方法で共有


WER レポートでの UMDF メタデータへのアクセス

このトピックでは、ユーザーモード ドライバー フレームワーク (UMDF) がクラッシュしたときにオペレーティング システムが作成する Windows エラー報告 (WER) レポートの場所と内容について説明します。

システムは、WUDFHostProblemWUDFUnhandledExceptionWUDFVerifierFailure の 3 種類の UMDF イベント タイプに対して WER レポートを生成します。

リフレクターがドライバーのホスト プロセスを終了すると、ホストのタイムアウトしきい値を超えたために、システムが WER 情報 を含む Report.wer という名前のファイルを生成することがあります。 具体的には、Report.wer には UMDF メタデータが含まれています。これは、ライブ デバッグ ターゲットへのアクセスなしで UMDF ドライバーをデバッグしようとしている場合に役立つ可能性があります。

Windows 8.1 では、Report.wer ファイルは C:\ProgramData\Microsoft\Windows\WER\ReportQueue ディレクトリにあります。 このディレクトリで、最新の NonCritical_HostProblem_* フォルダーを開き、Report.wer を見つけます。

次の PowerShell コマンドを使用して、UMDF の WER レポートにアクセスすることもできます。

get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt

WUDFHostProblem サンプル レポート

WUDFHostProblem タイプの UMDF WER レポートの例を次に示します。 上記の ReportQueue ディレクトリから取得しました。 PowerShell を使用してレポートを取得する場合、フィールドには Sig[0]、Sig[1]、Sig[2] の代わりに P0、P1、P2 というラベルが付けられる場合があります。 それ以外の場合、フィールドは同じであり、同じ可能な値が含まれます。 このサンプルは、OSR USB-FX2 ハードウェア参照ボードを使用する WDK サンプルの 1 つから生成されました。

Sig[0].Name=EventClass
Sig[0].Value=HostProblem
Sig[1].Name=Problem
Sig[1].Value=HostTimeout
Sig[2].Name=DetectedBy
Sig[2].Value=2
Sig[3].Name=UMDFVersion
Sig[3].Value=6.3.9600
Sig[4].Name=ExitCode
Sig[4].Value=103
Sig[5].Name=Operation
Sig[5].Value=3
Sig[6].Name=Message
Sig[6].Value=11b00
Sig[7].Name=Status
Sig[7].Value=ffffffff
Sig[8].Name=HardwareId
Sig[8].Value=USB\VID_0547&PID_1002&REV_0000

WUDFHostProblem フィールド

次の表では、WUDFHostProblem タイプのレポート内のフィールドに現れる可能性のある値について説明します。

インデックス 名前
0 EventClass

フレームワークは、この値を HostProblem に設定します。

1 問題

このフィールドには次のいずれかの値が格納されます。

  • HostFailure
  • SendFailure
  • HostTimeout
  • BadRequest
  • BadReply
  • HostFailure
  • その他
  • HostDisconnect
  • LeakedHandle
  • InvalidInterruptState
  • IsrTimedOut
2 DetectedBy

次のいずれかのリスト値が格納されます。

cpp WdfComponentInvalid = 0, WdfComponentPlatform, WdfComponentReflector, WdfComponentDriverManager, WdfComponentHost, WdfComponentFramework, WdfComponentTest, WdfComponentMax
3 UMDFVersion

現在使用されている UMDF ライブラリのバージョンを指定します。 ユーザーがフレームワーク ライブラリを更新するアクションを実行した場合、オペレーティング システムに付属しているバージョンよりも新しいバージョンになる可能性があることに注意してください。

4 ExitCode

次のいずれかのリスト値が格納されます。

cpp WdfHostExit_StillActive = 0x103, WdfHostExit_CodeUnknown = 0x70000000, WdfHostExit_InternalDriverStopReported, WdfHostExit_InternalDriverStopReportFailed, WdfHostExit_ExternalTermination

WdfHostExit_StillActive は、フレームワークがエラー レポートを作成した時点でホスト プロセスが実行されていたことを示します。

5 操作

次のいずれかのリスト値が格納されます。

cpp WudfOperation_Invalid, WudfOperation_Init, WudfOperation_HostShutdown, WudfOperation_Pnp, WudfOperation_Cleanup, WudfOperation_Close, WudfOperation_Cancel, WudfOperation_IO, WudfOperation_Interrupt, WudfOperation_PoFx, WudfOperation_Other, WudfOperation_Max
6 メッセージ

このフィールドの最初の桁は常に 1 です。これは、IRP が操作に関係していることを示します。 後続の数字のペアは、それぞれ IRP の MajorFunctionMinorFunction を示します。

たとえば、上記のサンプル レポートでは、このフィールドには値 11b00 が含まれています。 つまり、操作は、メジャー関数値 IRP_MJ_PNP、マイナー関数値 IRP_MN_START_DEVICE (1 = IRP メッセージ、1b = IRP_MJ_PNP、00 = IRP_MN_START_DEVICE) のドライバー ホスト プロセスの代わりに、リフレクターが処理した IRP であることを意味します。

7 状態

フレームワークでは、この値は常に 0xffffffff に設定されます。

8 HardwareId

このフィールドには、問題が発生したドライバーに関連付けられているデバイスのハードウェア ID が含まれています。

WUDFUnhandledException フィールド

次の表では、WUDFUnhandledException タイプのレポート内のフィールドに現れる可能性のある値について説明します。

インデックス 名前
0 EventClass

フレームワークは、この値を UnhandledException に設定します。

1 コンポーネント

このフィールドには次のいずれかの値が格納されます。

  • 無効
  • プラットフォーム
  • Reflector
  • DriverManager
  • Host
  • フレームワーク
  • テスト
2 ExceptionCode

例外が発生した理由。 値の一覧については、「EXCEPTION_RECORD」を参照してください。

3 RelativeFaultingAddress

例外が発生したアドレス。

4 CrashingModuleName 例外を発生させたドライバーの名前。
5 CrashingFileVersion ドライバーのフレームワークのバージョン。
6 LastDriverName ドライバー スタック内の最初の UMDF 以外のドライバー コンポーネントの名前。
7 LastDriverVersion ドライバー スタック内の最初の UMDF 以外のドライバー コンポーネントのバージョン番号。
8 UMDFVersion

現在使用されている UMDF ライブラリのバージョンを指定します。 ユーザーがフレームワーク ライブラリを更新するアクションを実行した場合、オペレーティング システムに付属しているバージョンよりも新しいバージョンになる可能性があることに注意してください。

9 HardwareId

Windows 8 以降では、ハードウェア ID は別のファイルで提供されます。 この場合、フレームワークは、この値を Dumped Separately に設定します。

WUDFVerifierFailure フィールド

次の表では、WUDFVerifierFailure タイプのレポート内のフィールドに現れる可能性のある値について説明します。

インデックス 名前
0 EventClass

フレームワークは、この値を VerifierFailure に設定します。

1 FoundBy

フレームワークは、この値を Framework に設定します。

2 カテゴリ

このフィールドには次のいずれかの値が格納されます。

  • Internal
  • Driver
  • 呼び出し側
  • 外部
  • UnhandledException
3 ErrorNumber 内部のみで使用します。
4 場所 内部のみで使用します。
5 Driver 失敗したドライバー モジュールの名前。
6 CallerAddress レポートの生成を開始したルーチンのアドレス。
7 UMDFVersion

現在使用されている UMDF ライブラリのバージョンを指定します。 ユーザーがフレームワーク ライブラリを更新するアクションを実行した場合、オペレーティング システムに付属しているバージョンよりも新しいバージョンになる可能性があることに注意してください。

8 HardwareId

Windows 8 以降では、ハードウェア ID は別のファイルで提供されます。 この場合、フレームワークは、この値を Dumped Separately に設定します。