WER レポートでの UMDF メタデータへのアクセス
このトピックでは、ユーザーモード ドライバー フレームワーク (UMDF) がクラッシュしたときにオペレーティング システムが作成する Windows エラー報告 (WER) レポートの場所と内容について説明します。
システムは、WUDFHostProblem、WUDFUnhandledException、WUDFVerifierFailure の 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 | 問題 | このフィールドには次のいずれかの値が格納されます。
|
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 の MajorFunction と MinorFunction を示します。 たとえば、上記のサンプル レポートでは、このフィールドには値 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 | コンポーネント | このフィールドには次のいずれかの値が格納されます。
|
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 | カテゴリ | このフィールドには次のいずれかの値が格納されます。
|
3 | ErrorNumber | 内部のみで使用します。 |
4 | 場所 | 内部のみで使用します。 |
5 | Driver | 失敗したドライバー モジュールの名前。 |
6 | CallerAddress | レポートの生成を開始したルーチンのアドレス。 |
7 | UMDFVersion | 現在使用されている UMDF ライブラリのバージョンを指定します。 ユーザーがフレームワーク ライブラリを更新するアクションを実行した場合、オペレーティング システムに付属しているバージョンよりも新しいバージョンになる可能性があることに注意してください。 |
8 | HardwareId | Windows 8 以降では、ハードウェア ID は別のファイルで提供されます。 この場合、フレームワークは、この値を Dumped Separately に設定します。 |