MmLockPagableDataSection 関数 (wdm.h)
mmLockPagableDataSection ルーチンは、ドライバー データのセクション全体をシステム空間にロックします。
構文
PVOID MmLockPagableDataSection(
[in] PVOID AddressWithinSection
);
パラメーター
[in] AddressWithinSection
ページング可能セクション内のデータの 1 つの項目のシンボリック アドレスを指定します。
戻り値
MmLockPagableDataSection は、セクションを識別する不透明な値を返します。 この値は、後で mmLockPagableSectionByHandle を するか、mmUnlockPagableImageSection をするために渡す必要があります。
備考
ドライバーは、MmLockPagableSectionByHandle このルーチンを使用し、mmUnlockPagableImageSection を して、通常はページング可能なプライベート データをメモリにロックできます。
データは、次の場合にロックダウンできます。
通常、データは <= APC_LEVEL でアクセスされますが、短期間より高い IRQL レベルでアクセスする必要がある場合があります。
ドライバーは、データを頻繁かつ予測的に使用しません。
たとえば、ミキサー デバイスのドライバーでは、ページング可能なデータ セクションが使用されます。 ドライバーは十分なデータを使用してページング可能なデータ セクションを作成する価値があり、ドライバーはデータが必要なタイミングを認識するためです。 このようなドライバーは、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 します。 PAGE キーワードでは大文字と小文字が区別されます。つまり、PAGE 大文字にする必要があります。
システムの初期化後にデータを破棄できるようにするために使用される #pragma data_seg("INIT") もあります。 PAGE ではなく、INIT使用する場合を除き、構文は同じです。 しかし、結果はそれではありません。PAGE ディレクティブを使用すると、データ セクションがページング可能になります。 INIT ディレクティブを使用すると、ドライバーがドライバーエントリ ルーチンまたは再初期化ルーチンから戻るとすぐに、セクション内のデータは破棄されます。
データのページングの詳細については、「ドライバーのページング可能なを作成する」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=APC_LEVEL |
DDI コンプライアンス規則 を する | HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm) |
関連項目
mmLockPagableSectionByHandle の
mmPageEntireDriver を する
mmResetDriverPaging の