ドライバーをページング可能にする
既定では、リンカは、".text" や ".data" などの名前をドライバー イメージ ファイルのコード セクションとデータ セクションに割り当てます。 ドライバーが読み込まれると、I/O マネージャーによってこれらのセクションが非ページになります。 非ページ セクションは常にメモリ常駐です。
ドライバー開発者には、ドライバーの指定された部分をページング可能にして、Windows が使用されていないときにこれらの部分をページング ファイルに移動できるようにするオプションが用意されています。 コード セクションまたはデータ セクションをページング可能にするには、ドライバー開発者はセクションに "PAGE" で始まる名前を割り当てます。 I/O マネージャーは、ドライバーを読み込むときにセクションの名前をチェックします。 セクション名が "PAGE" で始まる場合、I/O マネージャーはセクションをページング可能にします。
IRQL >= DISPATCH_LEVEL で実行されるコードは、メモリ常駐である必要があります。 つまり、このコードは、ページング不可能なセグメント内、またはメモリ内でロックされているページング可能なセグメント内の、いずれかに存在する必要があります。 IRQL >= DISPATCH_LEVEL で実行されているコードによってページ エラーが発生すると、バグ チェックが発生します。 ドライバーは、PAGED_CODE マクロを使用することで、ページング可能な関数が適切な IRQL でのみ呼び出されることを確認できます。
コードまたはデータ セクションがページング可能な場合は、ドライバーは MmLockPagableCodeSection または MmLockPagableDataSection ルーチンを呼び出すことによって、メモリ内のセクションをロックできます。 セクションは、ドライバーがロックを解除するための MmUnlockPagableImageSection ルーチンを呼び出すまで、ロックされたままになります。 ページング可能なセクションはロックされていますが、非ページ セクションと同じように動作します。
コード セクションとデータ セクションに名前を割り当てる方法については、「MmLockPagableCodeSection」および「MmLockPagableDataSection」を参照してください。
ここでは、次のトピックについて説明します。