バグ チェック 0x1: APC_INDEX_MISMATCH
APC_INDEX_MISMATCH バグ チェックの値は 0x00000001 です。 バグ チェックは、非同期プロシージャ呼び出し (APC) 状態インデックスの不一致を示します。
重要
この記事は、プログラマー向けです。 Microsoft のユーザーがお使いのコンピューターでブルー スクリーン エラー コードが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。
APC_INDEX_MISMATCH パラメーター
パラメーター | 説明 |
---|---|
1 | システム関数 (システム呼び出し) またはワーカー ルーチンのアドレス。 |
2 | 現在のスレッドの ApcStateIndex フィールドの値。 |
3 | 現在のスレッドの CombinedApcDisable フィールドの値。 このフィールドは、2 つの別個の 16 ビット フィールドで構成されます。(Thread>SpecialApcDisable<< 16) | Thread>KernelApcDisable。 |
4 | 呼び出しの種類: 0 - システム呼び出し 1 - ワーカー ルーチン |
原因
このバグ チェックの最も一般的な原因は、ファイル システムまたはドライバーが、無効にして再度有効にする呼び出しのシーケンスが一致しない場合です。 キー データ項目は、Thread>CombinedApcDisable フィールドです。 CombinedApcDisable フィールドは、2 つの別個の 16 ビット フィールドで構成されます。SpecialApcDisable および KernelApcDisable です。 いずれかのフィールドの負の値は、ドライバーが再度有効にすることなく、特殊または通常の APC を (それぞれ) 無効にしたことを示します。 正の値は、ドライバーが特殊または通常の APC を何度も有効にしたことを示します。
解決方法
この問題は、WinDbg または基本的なトラブルシューティング手法を使用して解決できます。
WinDbg を使用したデバッグ
!analyze デバッガ―拡張コマンドは、バグ チェックに関する情報を表示し、根本原因の特定に役立ちます。
!apc 拡張コマンドを使用して、1 つ以上の APC の内容を表示できます。
また、この停止コードの前にあるコードにブレークポイントを設定し、エラーが発生したコードへのシングル ステップ フォワードを試行することもできます。
WinDbg 使用の詳細については、「Windows デバッガー (WinDbg) を使用したクラッシュ ダンプ分析」を参照してください。
WinDbg を使用しないデバッグ
Windows デバッガーを使用してこの問題に取り組む備えがない場合:
このバグ チェックの原因になっているデバイスまたはドライバーの特定に役立つ可能性がある追加のエラー メッセージについて、イベント ビューアーでシステム ログを調べます。
バグ チェック メッセージでドライバーがわかる場合は、ドライバーを無効にするか、製造元にドライバーの更新プログラムを確認します。
インストールされた新しいハードウェアが、インストールされている Windows のバージョンと互換性があることを確認します。 たとえば、Windows 10 の仕様で必要なハードウェアに関する情報を取得できます。
一般的なトラブルシューティング情報の詳細については、バグ チェックのブルー スクリーン データの分析に関する記述を参照してください。
解説
このバグ チェックは、カーネルの内部エラーの結果です。 このエラーは、システム呼び出しの終了時に発生します。 このバグ チェックの原因として考えられるのは、保護されたリージョンまたはクリティカルなリージョンを入力またはそのままにするシステム呼び出しのシーケンスが一致しないファイル システムまたはドライバーです。 たとえば、KeEnterCriticalRegion へのそれぞれの呼び出しは、KeLeaveCriticalRegion と一致する呼び出しがあることが必要です。
ドライバーを開発している場合は、Windows Driver Kit で使用可能な静的分析ツールである静的ドライバー検証ツールを使用して、ドライバーを発送する前にコード内の問題を検出できます。 CriticalRegions ルールを使用して静的ドライバー検証ツールを実行し、ソース コードでこれらのシステム呼び出しが適切な順序で使用されていることを検証します。