WER がエラー報告を収集して分類するしくみ
Microsoft Windows エラー報告 (WER) サービスは、カーネル モード (オペレーティング システム) とユーザー モード (アプリケーション) の両方のクラッシュをキャプチャします。これには、クラッシュ時に実行されていたモジュール (コントロールとプラグイン) だけでなく、ドライバーとアプリケーションに関する情報も含まれます。
Windows エラー報告 (WER): 分類
エンド ユーザーがエラー報告をインターネット経由で Microsoft に送信するよう選ぶと、WER サービスがクラッシュに関する技術情報を収集します。このデータは、品質管理の目的にのみ使われ、マーケティング目的で個々のユーザーやインストール環境を追跡するために使われることはありません。エンド ユーザーが問題を解決するのに役立つ情報がある場合、Windows は、その情報へのリンクを含むメッセージをユーザーに表示します。
WER は、同じ問題に対するエラー報告を、1 つのバケットに分類します。ユーザーがエラー報告を送信すると、WER はその問題に対するバケットが既に存在するかどうかを判定します。存在する場合、報告は既にあるバケットに追加されます。存在しない場合は、新しいバケットが作られます。
ユーザー モード クラッシュとカーネル モード クラッシュとでは、収集されるデータの種類とバケットを定義するスキーマが異なります。
カーネル モード クラッシュを分類する
カーネル モード クラッシュは、まず停止コードによってグループ化され、次に個々の停止コードに応じて、その他のパラメーターによってグループ化されます。バケット名は、エラーとデバイスの種類に基づいて付けられます。以下に例を示します。
バケット名 | エラー |
---|---|
OLD_IMAGE_SAMPLE.SYS_DEV_3577 |
デバイス ID 3577 の古いバージョンの sample.sys によって生じたクラッシュ |
0x44_BUGCHECKING_DRIVER_ SAMPLE |
ドライバーの sample.sys によって生じた可能性のあるバグチェック 0x44 |
POOL_CORRUPTION_ SAMPLE |
ドライバーの sample.sys によって生じた可能性のあるプールの破損 |
0xBE_sample!bar+1a |
ドライバーの sample.sys がルーチン bar でクラッシュ |
カーネル モード クラッシュのエラー報告は、クラッシュ時に生成されるミニダンプ ファイルと、コンピューターの再起動時にエラー報告を送信する際に生成される XML ファイルで構成されています。
Windows が応答を停止すると、下位レベルのトラブルシューティング モードに戻ります。このモードでは、クラッシュ時にコンピューターで何が起こっていたかを特定する、低レベルのオペレーティング システム データ構造を含むダンプ ファイルがキャプチャされます。これらのデータ構造には、クラッシュ時にプロセッサが実行していた関数、CPU レジスタの状態、スタック、スレッド、プロセスの情報が含まれています。このデータはデバッガーで表示でき、問題のあるコンポーネントの識別に使うことができます。
また、ダンプ ファイルには、クラッシュ時にコンピューターに読み込まれていたすべてのドライバーの一覧も含まれています。デバッガーはこのデータを使って、クラッシュをデバッグするために読み込む必要があるドライバーのイメージとシンボルを特定します。また、モジュールの一覧も、既知の問題があるドライバーまたは古いドライバーがコンピューターで実行されているかどうかを判定するのに役立ちます。
Windows XP Service Pack 1 (SP1) 以降のバージョンでは、ダンプ ファイルが拡張され、トラブルシューティングに使うことができるクラッシュ ダンプ ファイルにドライバーが情報を格納できます。ドライバーからクラッシュ データを収集するルーチンは、KeRegisterBugCheckCallback です。
ユーザー モード クラッシュを分類する
ユーザー モード クラッシュは、次のパラメーターに従って分類されます。
アプリケーション名 - 例: winword.exe
アプリケーションのバージョン - 例: 10.0.2627.0
モジュール名 - 例: mso.dll
モジュールのバージョン - 例: 10.0.2613.1
モジュールへのオフセット - 例: 00003cbb
ユーザー モード クラッシュの .cab ファイルには、このような情報とミニダンプ ファイルが含まれています。ユーザー モード クラッシュのミニダンプ ファイルには、クラッシュ発生時のプロセスの状態、特に、アプリケーション内のすべてのスレッドのレジスタとスタックが含まれています。この情報は、どのアプリケーション コンポーネントがクラッシュの原因となったかを特定するのに使われます。また、ミニダンプには、クラッシュ時にアプリケーションに読み込まれていたすべてのモジュールの一覧も含まれているため、プロセスに読み込まれていた各モジュールに関する情報や、これらの各モジュールのシンボルを取得できます。