MmLockPagableDataSection 関数 (wdm.h)
MmLockPagableDataSection ルーチンは、ドライバー データのセクション全体をシステム空間にロックします。
構文
PVOID MmLockPagableDataSection(
[in] PVOID AddressWithinSection
);
パラメーター
[in] AddressWithinSection
ページング可能セクション内のデータの 1 つの項目のシンボリック アドレスを指定します。
戻り値
MmLockPagableDataSection は、 セクションを識別する不透明な値を返します。 この値は、後で MmLockPagableSectionByHandle または MmUnlockPagableImageSection に渡す必要があります。
注釈
ドライバーは、このルーチン 、MmLockPagableSectionByHandle、および MmUnlockPagableImageSection を使用して、通常はページング可能なプライベート データをメモリにロックすることができます。
データは、次の場合にロックダウンできます。
通常、データは = APC_LEVELで <アクセスされますが、短い期間、より高い IRQL レベルでアクセスする必要がある場合があります。
ドライバーは、データを使用する頻度が低く、予測可能です。
たとえば、ミキサー デバイスのドライバーでは、pageable-data セクションが使用されます。 ドライバーは、ページング可能なデータ セクションを作成するのに十分なデータを使用し、データが必要なタイミングをドライバーが認識するため、このようなドライバーでは 、MmLockPagableDataSection、 MmLockPagableSectionByHandle 、 MmUnlockPagableImageSection を使用して、必要なときにデータ セクションをシステム空間に取り込み、必要なときにページアウトできるようにします。
MmLockPagableDataSection を 1 回呼び出すと、参照データを含むセクション全体がシステム空間にロックされます。
セクションをロックダウンするのは高価な操作です。 pageable-data セクションがドライバーによって複数の場所にロックダウンされている場合は、最初の要求に MmLockPagableDataSection を使用します。 MmLockPagableSectionByHandle を呼び出し、MmLockPagableDataSection によって返されるハンドルを渡して、後続のロック要求を行います。 ハンドルによるロックにより、ドライバーのパフォーマンスが大幅に向上します。 ロックされたセクションは、 MmUnlockPagableImageSection を呼び出すことによってロック解除されます。
メモリ マネージャーは、 セクションの参照カウントを保持します。 pageable-data セクションは、参照カウントが 0 の場合にのみページングできます。 すべてのロック要求によってカウントがインクリメントされます。ロック解除要求ごとにカウントがデクリメントされます。 ドライバーはセクションをロックする回数だけセクションのロックを解除して、セクションが必要ない場合にこのようなセクションをページアウトできるようにする必要があります。 ハンドルは、カウントに関係なく常に有効です。 ハンドルのカウントが 0 で、 MmLockPagableSectionByHandle の呼び出しが行われた場合、カウントは 1 に設定され、セクションがページアウトされている場合は、ページインされます。
pageable-data セクション内のデータは、コンパイラ ディレクティブによってマークされます。 ページング可能なデータ セクションを作成するには、データ モジュールの先頭にある #pragma data_seg ("PAGE")、モジュールの末尾に #pragma data_seg () を使用します。 キーワード (keyword) PAGE では大文字と小文字が区別されます。つまり、PAGE は大文字にする必要があります。
システムの初期化後にデータを破棄できるようにするために使用される #pragma data_seg("INIT") もあります。 PAGE ではなく INIT を使用する場合を除き、構文は同じです。 ただし、結果はではありません。 PAGE ディレクティブを使用すると、データ セクションがページング可能になります。 INIT ディレクティブを使用すると、ドライバーがドライバーエントリルーチンまたは再初期化ルーチンから戻るとすぐに、セクションのデータは破棄されます。
データのページングの詳細については、「ドライバーを ページング可能にする」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <=APC_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm) |