バグ チェック 0xC2: BAD_POOL_CALLER
BAD_POOL_CALLER バグ チェックには、0x000000C2 の値があります。 これは、現在のスレッドが不適切なプール要求を行っていることを示します。
重要
この記事は、プログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。
BAD_POOL_CALLER パラメーター
パラメーター 1 は違反の種類を示します。
パラメーター 1 | パラメータ 2 | パラメーター 3 | パラメーター 4 | エラーの原因 |
---|---|---|---|---|
0x00 |
0 |
プールの種類 |
プール タグ |
現在のスレッドが 0 バイトのプール割り当てを要求しました。 |
0x01。 0x02。 0x04 |
プール ヘッダーへのポインター |
プール ヘッダーの内容の最初の部分 |
0 |
プール ヘッダーが破損しています。 |
0x06 |
予約されています。 |
プール ヘッダーへのポインター |
プール ヘッダーの内容 |
現在のスレッドは、既に解放されているプールを解放しようとしました。 |
0x07 |
予約されています。 |
プール ヘッダーの内容 |
解放されるプールのブロックのアドレス |
現在のスレッドは、既に解放されているプールを解放しようとしました。 |
0x08 |
現在の IRQL |
プールの種類 |
割り当てサイズ (バイト単位) |
現在のスレッドが無効な IRQL でプールを割り当てようとしました。 |
0x09 |
現在の IRQL |
プールの種類 |
プールのアドレス |
現在のスレッドが無効な IRQL でプールを解放しようとしました。 |
0x0A |
プールのアドレス |
アロケーターのタグ |
解放を試みながら使用されているタグ |
現在のスレッドが間違ったタグを使用してプール メモリを解放しようとしました。 (メモリは別のコンポーネントに属している可能性があります)。 |
0x0B。 0x0C。 または、0x0D |
プールのアドレス |
プール割り当てのタグ |
正しくないクォータ プロセス ポインター |
現在のスレッドが、破損したプール割り当てでクォータを解放しようとしました。 |
0x40 |
開始アドレス |
システム・アドレス・スペースの開始 |
0 |
現在のスレッドは、ユーザー モード アドレスでカーネル プールを解放しようとしました。 |
0x41 |
開始アドレス |
物理ページ フレーム |
最も高い物理ページ フレーム |
現在のスレッドが、割り当てされていない非ページ プール アドレスを解放しようとしました。 |
0x42 または 443 |
解放されるアドレス |
0 |
0 |
現在のスレッドは、どのプール内にも存在しない仮想アドレスを解放しようとしました。 |
0x44 |
開始アドレス |
予約されています。 |
0 |
現在のスレッドが、割り当てされていない非ページ プール アドレスを解放しようとしました。 |
0x46 |
開始アドレス |
0 |
0 |
現在のスレッドが無効なプール アドレスを解放しようとしました。 |
0x47 |
開始アドレス |
物理ページ フレーム |
最も高い物理ページ フレーム |
現在のスレッドが、割り当てされていない非ページ プール アドレスを解放しようとしました。 |
0x48 |
開始アドレス |
予約済み |
予約済み |
現在のスレッドが、割り当てされていないページ プール アドレスを解放しようとしました。 |
0x50 |
開始アドレス |
ページ プールの先頭からの開始オフセット (ページ単位) |
ページ プール サイズのバイト数 |
現在のスレッドが、割り当てされていないページ プール アドレスを解放しようとしました。 |
0x60 |
開始アドレス |
0 |
0 |
現在のスレッドが、無効な連続したメモリ アドレスを解放しようとしました。 (呼び出し元 MmFreeContiguousMemory が不適切なポインターを渡しています。) |
0x99 |
解放されているアドレス |
0 |
0 |
現在のスレッドがプール アドレスを解放しようとしました。 (このコードは、プール ヘッダーの破損を示すこともできます)。 |
0x9A |
プールの種類 |
要求されたバイト数 |
プール タグ |
現在のスレッドは、割り当て要求 MUST_SUCCEED をマークしました。 (このプール型は、サポートされなくなりました)。 |
0x9B |
プールの種類 |
要求されたバイト数 |
呼び出し元のアドレス |
現在のスレッドが、タグが 0 のプールを割り当てようとしました (これは追跡不可能であり、既存のタグ テーブルが破損する可能性があります)。 |
0x9C |
プールの種類 |
要求されたバイト数 |
呼び出し元のアドレス |
現在のスレッドが、タグが 「BIG」 のプールを割り当てようとしました (これは追跡不可能であり、既存のタグ テーブルが破損する可能性があります)。 |
0x9D |
プール タグが正しく使用されていません |
プールの種類 |
呼び出し元のアドレス |
現在のスレッドは、文字または数字を含まないタグを持つプールを割り当てようとしました。 このようなタグを使用すると、プールの問題の追跡が困難になります。 |
0x41286 |
予約済み |
予約済み |
ページ プールの先頭からの開始オフセット (ページ単位) |
現在のスレッドは、割り当ての途中でページ プール アドレスを解放しようとしました。 |
_POOL_TYPE コードは Ntddk.h で列挙されます。 特に、0 は非ページ プールを示し、1 はページ プールを示します。
原因
現在のスレッドによって無効なプール要求が行われました。 通常、これは不適切な IRQL レベルであるか、同じメモリ割り当てを 二重に解放しています。
解決方法
メモリ プール オプションを有効にしてドライバー検証ツールをアクティブ化し、これらのエラーに関する詳細情報を取得し、障害が発生しているドライバーを見つけます。
ドライバーの検証ツール
ドライバーの検証ツールは、リアルタイムで実行してドライバーの動作を調べるためのツールです。 ドライバー コードの回でエラーが発生した場合は、ドライバー コードの該当部分をさらに精査できるように、事前に例外を作成します。 ドライバーの検証ツール マネージャーは、Windows に組み込まれており、すべての Windows PC で使用できます。 ドライバーの検証ツール マネージャーを起動するには、コマンド プロンプトで「Verifier」と入力します。 どのドライバーを検証するかを構成できます。 ドライバーを検証するコードが実行されるとオーバーヘッドが増えるので、可能な限り少ない数のドライバーで試してみてください。 詳細については、「ドライバーの検証ツール」を参照してください。
Windows メモリ診断:
特に、メモリ プールが破損している状況では、Windows メモリ診断ツールを実行して、物理メモリを原因として分離してみてください。 コントロール パネルの検索ボックスに「Memory」と入力し、[コンピューターのメモリの問題を診断する] を選択します。テストの実行後、イベント ビューアーを使用して、システム ログの下に結果を表示します。 MemoryDiagnostics-Results エントリを探して、結果を表示します。