バグ チェック 0x7F: UNEXPECTED_KERNEL_MODE_TRAP
UNEXPECTED_KERNEL_MODE_TRAP バグ チェックの値は、0x0000007F です。 このバグ チェックは、Intel CPU によってトラップが生成され、カーネルがこのトラップをキャッチできなかったことを示しています。
このトラップには、次のいずれかの種類があります。
- バインドされたトラップ。これは、カーネルがキャッチすることを許可されていないトラップです。
- 二重障害。これは、以前の障害の処理中に発生した障害であり、常にシステム障害が発生します。
重要
このトピックはプログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。
パラメーター 1
ブルー スクリーンに表示される最初のパラメーターは、トラップ番号を指定します。
最も一般的なトラップ番号は、次のコードです。
パラメーター | トラップ コード | 説明 |
---|---|---|
0x00000000 | ゼロ除算 | DIV 命令が実行され、除数が 0 であることを示します。 メモリの破損、その他のハードウェアの問題、またはソフトウェアの障害によって、このエラーが発生する可能性があります。 |
0x00000004 | オーバーフロー | オーバーフロー (OF) フラグが設定されているときに、プロセッサが割り込みハンドラーの呼び出しを実行するときに発生します。 |
0x00000005 | 境界チェック エラー | プロセッサが BOUND 命令の実行中に、オペランドが指定された制限を超えていることがわかります。 BOUND 命令は、符号付き配列インデックスが特定の範囲内にあることを保証します。 |
0x00000006 | 無効なオペコード | プロセッサが無効な命令を実行しようとしたことを示します。 このエラーは、通常、命令ポインターが破損し、間違った場所を指している場合に発生します。 このエラーの最も一般的な原因は、ハードウェア メモリの破損です。 |
0x00000008 | 二重障害 | 以前の例外に対するハンドラーの呼び出し中に例外が発生することを示します。 通常、2 つの例外は順次処理されます。 シリアルに処理できない例外がいくつかあります。そのため、プロセッサは二重障害を通知します。 |
二重障害の一般的な原因は 2 つあります。
- 最初の原因は、カーネル スタック オーバーフローです。 このオーバーフローは、ガード ページがヒットし、カーネルがトラップ フレームをプッシュしようとしたときに発生します。 スタックが残っていないため、スタック オーバーフローが発生し、二重障害が発生します。 この状況が発生したと思う場合は、!thread 拡張機能を使用してスタックの制限を特定し、kb (Display Stack Backtrace) コマンドを大きな値 (kb 100 など) で使用してスタック全体を表示します。
- 2 番目の一般的な原因は、ハードウェアの問題です。
あまり一般的でないトラップ コードには、次の値が含まれます。
- 0x00000001: システム デバッガー呼び出し (DEBUG)
- 0x00000003: デバッガー ブレークポイント (INT3)
- 0x00000007: コプロセッサが存在しないハードウェア コプロセッサ命令 (NXP_NOT_AVAILABLE)
- 0x0000000A: 破損したタスク状態セグメント (INVALID_TSS)
- 0x0000000B: 存在しなかったメモリ セグメントへのアクセス (SEGMENT_NOT_PRESENT)
- 0x0000000C: スタックの制限を超えるメモリへのアクセス (STACK_FAULT)
- 0x0000000D: 他の例外の対象ではない例外、アプリケーションのアクセス違反に関連する保護エラー (GP_FAULT)
- 0x0000000F: 予約済みトラップ例外 (RESERVED_TRAP)
- 0x00000010: ハードウェア コプロセッサ例外 (NPX_ERROR)
- 0x00000011: 配置チェック例外 (ALIGNMENT_CHECK)
その他のトラップ番号については、トラブルシューティングを行うプロセッサの Intel プロセッサ アーキテクチャ マニュアルを参照してください。
原因
バグ チェック 0x7F は、通常、ハードウェア (特にメモリ) の障害または不一致をインストールした後、またはインストールされているハードウェアが失敗した場合に発生します。
カーネル スタックがオーバーフローすると、二重障害が発生する可能性があります。 このオーバーフローは、複数のドライバーが同じスタックに接続されている場合に発生します。 たとえば、2 つのファイル システム フィルター ドライバーが同じスタックにアタッチされ、ファイル システムが再帰すると、スタックがオーバーフローします。
デバッグ
常に 、-v オプション verbose で !analyze 拡張機能から始めます。 出力とエラーコードを調べます。 複数のダンプで繰り返し発生する傾向を探します。
!analyze を試した後、kv (Display Stack Backtrace) デバッガー コマンドを使用します。
- kv にタスク ゲートが表示されている場合は、コロンの前のパーツで .tss (Display Task State Segment) コマンドを使用します。
- kv にトラップ フレームが表示されている場合は、.trap (Display Trap Frame) コマンドを使用してフレームをフォーマットします。
- それ以外の場合は、適切なフレームで .trap (Display Trap Frame) コマンドを使用します。 x86 ベースのプラットフォームでは、このフレームは手順 NT!KiTrap に関連付けられています。
これらのコマンドのいずれかを使用した後、kv をもう一度使用して新しいスタックを表示します。
トラブルシューティング
ハードウェア
最近コンピュータにハードウェアを追加した場合は、ハードウェアを取り外して、エラーが再発するかどうかを確認します。 既存のハードウェアで障害が発生した場合は、問題のあるコンポーネントを外すか交換します。 システムの製造元から提供されたハードウェア診断を実行して、どのハードウェア コンポーネントに障害が発生したかを判断します。
メモリの障害または不一致により、このバグ チェックが発生する可能性があります。 Windows のメモリ診断プログラムを使用して、すべてのシステム メモリをテストします。
すべてのハード ディスク ドライブとハード ディスク コントローラーが、インストールされているバージョンの Windows と互換性があることを確認します。
システムのマザーボードには、傷のついたトレースや欠陥のあるコンポーネントなどの問題が発生する可能性があります。 電源が故障すると、問題が発生する可能性もあります。
オーバークロック では、CPU が定格仕様を超える速度で実行されるように設定されているため、このエラーが発生する可能性があります。 エラーが発生しているコンピューターをオーバークロックした場合は、CPU を既定のクロック速度設定に戻します。 BIOS のメモリ キャッシュを無効にして、そのオプションが使用可能な場合に問題を解決します。
ソフトウェア
イベント ビューアーのシステム ログを確認して、エラーの原因となっているデバイスまたはドライバーを特定するのに役立つ可能性があるその他のエラー メッセージを確認します。
ACPI/BIOS、ハード ドライバー コントローラー、またはハードウェア製造元のネットワーク カードの更新プログラムの可用性を確認します。
新規または更新されたデバイス ドライバーのインストール後にエラーが発生した場合は、ドライバーを削除または交換します。 このような状況で、スタートアップ シーケンス中にエラーが発生した場合は、セーフ モードを使用して、障害のあるドライバーの名前を変更または削除します。 ドライバーがセーフ モードでシステム起動プロセスの一部として使用されている場合は、ファイルにアクセスするために回復コンソールを使用してコンピューターを起動します。 [前回正常起動時の構成] オプションを試行します。 このオプションは、一度に 1 つのドライバーまたはサービスのみを追加する場合に最も効果的です。
新しいバージョンの Windows オペレーティング システムへのアップグレード中にこのエラーが発生した場合は、互換性のないソフトウェアが原因である可能性があります。 たとえば、デバイス ドライバー、システム サービス、ウイルス スキャナー、バックアップ ツールなどがあります。 可能であれば、すべてのサード パーティ製デバイス ドライバーとシステム サービスを削除し、アップグレードする前にウイルス スキャナーを無効にします。 これらのツールの更新プログラムを入手するには、ソフトウェアの製造元に問い合わせてください。 また、最新の Windows 更新プログラムがインストールされていることを確認します。