カーネル ライブ ダンプ コード リファレンス
このセクションでは、発生する可能性がある一般的なカーネル ライブ ダンプ コードについて説明します。 ライブ ダンプでは OS はリセットされませんが、通常とは異なる状況でオペレーティング システムを続行できる場合のメモリ情報をキャプチャできます。
Note
このトピックはプログラマー向けです。 カスタマーのシステムでブルー スクリーンとバグ チェック コードが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。
カーネル ライブ ダンプとバグ チェックの比較
従来のバグ チェックでは、PC がリセットされ、ユーザーの作業が中断されます。 カーネル ライブ ダンプの目標は、データを収集して通常とは異なる状況のトラブルシューティングを行うことですが、OS の操作は続行することができます。 これにより、バグ チェックと比較すると "致命的ではない" 場合はダウンタイムが短縮されますが、影響が大きい場合は失敗して停止します。 カーネル ライブ ダンプは、OS を既知の正常な状態に回復できる場合に使用されます。 たとえば、サブシステムのハードウェア リセット (ビデオやディスプレイ、USB3、Wi-Fi など) を使用すると、ユーザーへの影響を最小限に抑えて、システムを正常な状態に戻すことができます。
カーネル ライブ ダンプは、カーネル メモリの一貫したスナップショットを作成し、将来の分析のためにダンプ ファイルに保存します。 パフォーマンスへの影響を最小限に抑えるために、メモリ コピー手法を使用して、短時間でダンプ ファイルを作成します。 また、ライブ ダンプのコレクションが調整されるため、ユーザーへの影響が最小限に抑えられます。
カーネル ライブ ダンプは、何らかの処理に長時間かかっているものの、技術的な障害は発生していない問題のカテゴリに対して有効です。 ウォッチドッグ タイマーは、操作の開始時に初期化できます。 想定時間内に操作が完了する前にウォッチドッグの有効期限が切れる場合、システムのライブ ダンプを実行することができます。 その後、その操作の呼び出し履歴と関連する待機チェーンを走査してダンプを分析し、想定時間時間内に完了しない原因を調査することができます。
システム ログは、何らかのエラーが発生し、コード所有者がエラーの原因を記録して、原因を特定できるときに適切に動作します。 ウォッチドッグ タイマーを使用するライブ ダンプでは、予想されず記録されなかったエラーのパスをキャッチしようとします。 ただし、すべてのエラーと同様に、システム ログによって、エラーの特定の根本原因に関する手掛かりを示す可能性がある他の問題が特定されることがあります。
カーネル ライブ ダンプ ファイル コンテンツ
通常のダンプ ファイルと同様に、ライブ ダンプ ファイルには、(セカンダリ データを含む) ミニダンプと、アクティブ ダンプに似ているユーザー モード メモリも含む可能性のある完全なカーネル ダンプが含まれることがあります。 ダンプ ファイル コンテンツに関する一般的な情報については、「さまざまなカーネルモード ダンプ ファイル」をご覧ください。 特定のハードウェア関連データをキャプチャするように設計されているため、ミニダンプのキャプチャのみを試みるライブ ダンプもあれば、より大きなカーネル ライブ ダンプのキャプチャを試みるライブ ダンプもあります。
パフォーマンス、ファイル サイズ、ダンプ キャプチャの信頼性のために、スタンドバイ一覧およびファイル キャッシュのページなど、一部の情報は含まれていません。
通常、ライブ ダンプ ファイルには、次のようなメモリ ページが含まれます。
- KdDebuggerBlock
- 読み込まれたモジュール一覧
各プロセッサについて、カーネル ダンプでは次の情報がキャプチャされます。
- KiProcessorBlock
- PRCB
- 現在のスタック
- 現在のページのディレクトリ テーブル
- KI_USER_SHARED_DATA
- NTOS カーネル イメージ
- HAL イメージ
カーネル ダンプの追加情報には、次のものが含まれます。
- スレッドまたはメモリの状態
- メモリ内のログ
一部のライブ ダンプには、ユーザーモードのプロセス ページが含まれている場合があります。
USB 障害の USB 固有データなど、追加のドメイン固有データが、一部のライブ ダンプに含まれている場合もあります。
部分的なカーネル ライブ ダンプ ファイル
部分的なカーネル ライブ ダンプ ファイルは、ライブ ダンプがすべての対象のメモリ ページを確実にキャプチャできない状況において生成される可能性があります。 部分的なダンプでキャプチャされた情報は、有効なダンプの生成に必要な重要なデータを含むページを他のページより前にキャプチャすることにより、フィルター処理されて優先順位が設定されます。 たとえば、ライブ ダンプにユーザー ページが含まれている場合、カーネル ページはユーザー ページよりも高い優先順位が設定されます。 状況によっては、すべての対象のオプションのメモリ ページをキャプチャするために使用できるリソースが不足しているため、ダンプ ファイルにメモリがない可能性があります。 ダンプ ファイルは引き続き WinDbg デバッガーによって認識される必要がありますが、メモリをダンプしようとするとエラーが表示されることがあります。 1 つのアドレスでメモリをダンプしようとするとデバッガーにエラーが表示される場合は、!pte 拡張機能を使ってアドレスの PTE が有効かどうかを確認できます。 これは、メモリ アドレスが本当に無効であるかどうか、またはページは有効であるものの、単にダンプ ファイルで使用できないだけかどうかを判断するのに役立ちます。
ライブ ダンプ ファイルを分析する
ライブ ダンプが発生すると、他のメモリ ダンプ ファイルに使用されているのと同じ手法を使ってダンプ ファイルを分析することができます。 エラー発生時のメモリのコンテンツを理解するには、プロセッサのメモリ レジスタとアセンブリのプログラミングに関する知識が必要になります。
詳細については、以下を参照してください:
WinDbg を使用してライブ ダンプ停止コード情報を表示する
特定のライブ ダンプ コードがこのトピックに含まれていない場合は、Windows Debugger (WinDbg) の !analyze 拡張機能を (カーネル モードで) お使いください。次の構文に従い、<code>
をライブ ダンプ コードで置き換えます。
!analyze -show <code>
このコマンドを入力すると、指定したライブ ダンプ コードに関する情報が WinDbg によって表示されます。 既定の基数が 16 ではない場合、<code>
の前に 0x を付けます。
ライブ ダンプ コードのパラメーターを !analyze コマンドに指定し、利用可能なパラメーターの情報を表示します。 たとえば、バグ チェック 0x144 BUGCODE_USB3_DRIVER に関する情報を表示するには、次に示されているように、パラメーター 1 の値に 0x3003 を指定して !analyze -show 0x144 0x3003
を使います。
0: kd> !analyze -show 0x144 0x3003
BUGCODE_USB3_DRIVER (144)
This bugcheck usually happens when the USB3 core stack detects an invalid
operation being performed by a USB client. This bugcheck may also occur
due to hardware failure on a USB Boot Device.
Arguments:
Arg1: 0000000000003003, USB3_WER_BUGCODE_USBHUB3_DEVICE_ENUMERATION_FAILURE
A USB device failed enumeration.
Arg2: 0000000000000000, USBHUB3_LIVEDUMP_CONTEXT
Arg3: 0000000000000000, 0
Arg4: 0000000000000000, 0
WinDbg をダウンロードするには、Windows 向けデバッグ ツールを参照してください。 WinDbg 開発ツールの詳細情報については、「Windows のデバッグの概要」を参照してください。
ライブ ダンプ ファイルの場所
既定では、ライブ ダンプは 'C:\WINDOWS\LiveKernelReports' ディレクトリに格納されます。
完全なダンプ: %systemroot%\LiveKernelReports\*.dmp
ミニダンプ: %systemroot%\LiveKernelReports\<ComponentName>\*.dmp
ディレクトリ構造は、さまざまなコンポーネントのライブ ダンプを格納するために使用されます。
NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG
ライブ ダンプ レジストリ キー
システム生成のライブ カーネル レポートの構成オプションについて詳しくは、「WER 設定」をご覧ください。
PowerShell を使用してライブ ダンプを手動でトリガーする
管理者の PowerShell プロンプトを開きます。
StorageSubsystem のフレンドリ名を取得するには、Get-StorageSubSystem PowerShell コマンドを使用します。
C:\> Get-StorageSubSystem
FriendlyName HealthStatus OperationalStatus
------------ ------------ -----------------
Windows Storage on 10-2411-PC Healthy OK
- Get-StorageDiagnosticInfo を使用して、上記のサブシステム (およびその他の診断ログ) のライブ ダンプを生成します。 詳細については、「Get-StorageDiagnosticInfo」をご覧ください。
C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
- 出力では、要求された情報が生成されていることが示されています。
Gathering storage subsystem diagnostic information
Running
[oooooooooooo ]
- ダンプは
[DestinationPath]\localhost
内にあります。
C:\> dir C:\destinationfolder\localhost\*.dmp
Directory: C:\destinationfolder\localhost
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/5/2016 1:08 PM 867135488 LiveDump.dmp
- デバッガーを使用してダンプ ファイルで !analyze を実行すると、これが LIVE_SYSTEM_DUMP (161) のライブ ダンプ コードであることが示されます。
カーネル ライブ ダンプ コード
次の表に、カーネル ライブ ダンプ コードへのリンクが示されています。
これらの停止コードは、ライブ ダンプに対して使用したり、デバイスのバグ チェックを行うために使用したりできます。
コード | Name |
---|---|
0x00000124 | WHEA_UNCORRECTABLE_ERROR |
0x00000144 | BUGCODE_USB3_DRIVER |
0x00000164 | WIN32K_CRITICAL_FAILURE |