バグ チェック 0x76: PROCESS_HAS_LOCKED_PAGES

PROCESS_HAS_LOCKED_PAGES バグ チェックの値は 0x00000076 です。 このバグ チェックは、ドライバーが I/O 操作後にロックされたページを解放できなかったか、既にロック解除されているページのロックを解除しようとしたことを示します。

重要

この記事は、プログラマー向けです。 コンピューターを使用中に、ブルー スクリーン エラーが表示された場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。

PROCESS_HAS_LOCKED_PAGES パラメーター

パラメーター 1 パラメータ 2 パラメーター 3 パラメーター 4 エラーの原因

0x00

プロセスオブジェクトへのポインター

ロックされたページの数

ドライバー スタックへのポインター (有効になっている場合)。 それ以外の場合、このパラメーターはゼロです。

終了しようとしているプロセスのメモリ ページがロックされています。 ドライバーは、プロセスが終了する前に、プロセスでロックされている可能性があるメモリのロックを解除する必要があります。

0x01

ドライバーによって指定された MDL

そのプロセス内のロックされたメモリ ページの現在の数

そのプロセスのドライバー スタックへのポインター (有効になっている場合)。 それ以外の場合、このパラメーターはゼロです。

ドライバーがロックされていないプロセス メモリ ページのロックを解除しようとしています。

原因

ドライバーは、ロックされているページのロック解除に失敗したか (パラメーター 1 の値が0x0)、またはドライバーがロックされていないページまたは既にロック解除されているページのロックを解除しようとしています (パラメーター 1 の値が0x1)。

解決方法

!analyze デバッグ拡張機能は、バグ チェックに関する情報を表示し、根本原因の特定に役立ちます。

パラメーター 1 の値が0x0

最初に、 すべての物理メモリ全体にわたり、現在のプロセス ポインターで !search 拡張機能を使用します。 この拡張機能では、現在のプロセスを指すメモリ記述子リスト (MDL) が少なくとも 1 つ見つかる場合があります。 次に、見つけた各 MDL で !search を使用して、現在のプロセスを指す I/O 要求パケット (IRP) を取得します。 この IRP から、ページをリークしているドライバーを識別できます。

それ以外の場合は、レジストリを編集してエラーの原因となったドライバーを検出できます。

  1. \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management レジストリ キーで、 TrackLockedPages 値を作成または編集し、DWORD 1 に設定します。

  2. コンピューターを再起動します。

その後、システムはスタック トレースを保存するため、問題の原因となったドライバーを簡単に特定できます。 ドライバーで同じエラーが再度発生した場合、 バグ チェック 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS) が発行され、このエラーの原因となるドライバーの名前がブルー スクリーンに表示され、メモリ内の場所 (PUNICODE_STRING) KiBugCheckDriverに格納されます。

パラメーター 1 の値が0x1

メモリをロックおよびロック解除するドライバーのソース コードを調べて、最初にロックされずにメモリのロックが解除されているインスタンスを見つけようとします。