バグ チェック 0xA: IRQL_NOT_LESS_OR_EQUAL
IRQL_NOT_LESS_OR_EQUALバグ チェックには、0x0000000Aの値があります。 このバグ チェックは、Microsoft Windows またはカーネル モード ドライバーが、割り込み要求レベル (IRQL) が発生している間に、無効なアドレスでページングされたメモリにアクセスしたことを示しています。 通常、原因は不適切なポインターまたはページングの問題です。
重要
この記事は、プログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。
IRQL_NOT_LESS_OR_EQUAL パラメーター
パラメーター | 説明 |
---|---|
1 | アクセスできなかった仮想メモリ アドレス。 このアドレスの !pool を使用して、ページ プールかどうかを確認します。 エラーに関する情報の収集に役立つ可能性があるその他のコマンドは、 !pte、 !address、そして 、ln(最も近いシンボルの一覧表示) です。 |
2 | 障害時の IRQL。 値: 2 - 障害発生時に IRQL が DISPATCH_LEVEL になりました。 |
3 | エラーの原因となった操作を記述するビット フィールド。 ビット 3 は、このレベルのレポートをサポートするチップセットでのみ使用できます。 0 ビットの値: 0 - 読み取り操作 1 - 書き込み操作 3 ビットの値: 0 - 実行操作ではありません 1 - 実行操作 ビット 0 とビット 3 の結合値: 0x0 - パラメーター 1 のアドレスから読み取ろうとしているエラー 0x1 - パラメーター 1 のアドレスに書き込もうとするエラー 0x8 - パラメーター 1 のアドレスからコードを実行しようとしてエラーが発生しました この値の原因は次のとおりです。
|
4 | 障害時の命令ポインター。 このアドレスで ln (最も近いシンボルのリスト) コマンドを使用して、関数の名前を確認します。 |
原因
このバグチェックは、不適切なアドレスを使用するカーネル モードのデバイス ドライバーによって発生します。
このバグチェックは、発生した割り込み要求レベル (IRQL) で無効なアドレスへのアクセスが試行されたことを示しています。 原因は、メモリ ポインターが正しくないか、デバイス ドライバー コードのページングの問題です。
バグチェックの原因となったコーディング エラーの種類を分類するために使用できる一般的なガイドラインは次のとおりです。
パラメーター 1 が0x1000未満の場合、問題は NULL ポインター逆参照である可能性があります。
もし、 !pool がパラメーター 1 がページング プール (または他の種類のページング可能なメモリ) であると報告した場合、IRQL が高すぎてこのデータにアクセスできません。 低い IRQL で実行するか、非ページ プールにデータを割り当てます。
パラメーター 3 が、バグ チェックがページング可能なコードを実行しようとしたことを示している場合、IRQL が高すぎてこの関数を呼び出できません。 低い IRQL で実行するか、コードをページング可能としてマークしないでください。
これは、use-after-free または bit-flipping によって引き起こされる不適切なポインターである可能性があります。 !pte、 !address、そして ln (最も近いシンボルの一覧)を使用して、パラメーター 1 の有効性を調べます。
解決方法
カーネル デバッガーが使用可能な場合は、スタック トレースを取得します。 まず、 !analyze デバッガー拡張機能を実行して、バグ チェックに関する情報を表示します。 !analyze 拡張機能は、根本原因の特定に役立ちます。 次に、呼び出し履歴を表示する k* (スタック バックトレースの表示) コマンドのいずれかを入力します。
情報を収集する
ドライバーの名前がブルースクリーンに表示されていたかどうかを確認します。
イベント ビューアーのシステム ログを確認して、エラーの原因となっているデバイスまたはドライバーを特定するのに役立つ可能性があるその他のエラー メッセージを確認します。 ブルー スクリーンと同じ時間枠で発生したシステム ログで、重大なエラーを探します。
ドライバー検証ツール
ドライバーの検証ツールは、リアルタイムで実行してドライバーの動作を調べるためのツールです。 たとえば、ドライバーの検証ツールでは、メモリ プールなどのメモリ リソースの使用がチェックされます。 ドライバー コードの実行でエラーが特定された場合は、ドライバー コードのその部分をさらに詳しく調査できるように、事前に例外が作成されます。 ドライバーの検証ツール マネージャーは、Windows に組み込まれており、すべての Windows PC で使用できます。
ドライバーの検証ツール マネージャーを起動するには、コマンド プロンプトで「 Verifier 」と入力します。 どのドライバーを検証するかを構成できます。 ドライバーを検証するコードでは、実行時にオーバーヘッドが増加するため、可能な限り最小のドライバー数を確認してみてください。 詳細については、「ドライバーの検証ツール」を参照してください。
次のコードは、デバッグの例を示しています。
kd> .bugcheck [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000
kd> kb [Lists the stack trace.]
ChildEBP RetAddr Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194
kd> kv [Lists the trap frames.]
ChildEBP RetAddr Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194
kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010202
ErrCode = 00000000
00000000 ??????????????? [The current instruction pointer is NULL.]
kd> kb [Gives the stack trace before the fault.]
ChildEBP RetAddr Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0
解説
このバグチェックを生成するエラーは、通常、障害のあるデバイス ドライバー、システム サービス、または BIOS のインストール後に発生します。
新しいバージョンの Windows へのアップグレード中にバグ チェック 0xA が発生した場合は、デバイス ドライバー、システム サービス、ウイルス スキャナー、または新しいバージョンと互換性のないバックアップ ツールが原因でエラーが発生する可能性があります。
障害のあるハードウェアの問題の解決: システムに最近ハードウェアを追加した場合は、そのハードウェアを取り外して、エラーが再発するかどうかを確認します。 既存のハードウェアで障害が発生した場合は、問題のあるコンポーネントを外すか交換します。 また、システム製造元から提供されたハードウェア診断も実行します。 これらの手順の詳細については、コンピューターの取扱説明書を参照してください。
障害のあるシステム サービスの問題の解決: サービスを無効にし、それによってエラーが解決されるかどうかを確認します。 その場合は、システム サービスの製造元に、更新プログラムを入手できるかどうかを確認します。 システムの起動中にエラーが発生する場合は、Windows の修復オプションを調べます。 詳しくは、「Windows 10 の回復オプション」をご覧ください。
ウイルス対策ソフトウェアの問題の解決: プログラムを無効にし、それによってエラーが解決されるかどうかを確認します。 その場合は、プログラムの製造元に、更新プログラムを入手できるかどうかを確認します。
バグ チェックのトラブルシューティングに関する一般的な情報については、バグ チェックのブルー スクリーン データの分析に関する記述を参照してください。