次の方法で共有


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)

関連項目

MmLockPagableCodeSection

mmLockPagableSectionByHandle

mmPageEntireDriver する

mmResetDriverPaging

MmUnlockPagableImageSection