次の方法で共有


MmLockPagableSectionByHandle 関数 (ntddk.h)

mmLockPagableSectionByHandle ルーチンは、ページング可能なコードまたはデータ セクションを、セクションへのハンドルの参照カウントをインクリメントすることによってシステム メモリにロックします。

構文

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

パラメーター

[in] ImageSectionHandle

ページング可能なコードまたはデータ セクションへのハンドル。 呼び出し元は、MmLockPagableCodeSection または mmLockPagableDataSection ルーチン 以前の呼び出しからこのハンドルを取得しました。

戻り値

何一つ

備考

ドライバーは、最初に mmLockPagableCodeSection 呼び出すか、mmLockPagableDataSection して、ページング可能なコードまたはデータ セクションへのハンドルを取得します。 その後、ドライバーは、MmLockPagableSectionByHandle を呼び出し、mmUnlockPagableImageSection して、ハンドルの参照カウントをインクリメントおよびデクリメントできます。

mmLockPagableCodeSection または mmLockPagableDataSection 呼び出し、ページング可能なセクションをシステム メモリにロックし、セクションにハンドルを返し、ハンドルの参照カウントを 1 に初期化します。 mmLockPagableSectionByHandle 参照カウントを 1 ずつインクリメントし、mmUnlockPagableImageSection 参照カウントを 1 ずつ減らします。

ハンドルの参照カウントが 0 以外の場合、ページング可能セクションはロックされます。 参照カウントが 0 の場合、セクションはロック解除されます。

ページング可能セクションのハンドルは、ドライバーがメモリに読み込まれたままである限り有効なままです。 ドライバーは同じハンドルを使用して、セクションを繰り返しロックおよびロック解除できます。 つまり、ドライバーは、参照カウントが 0 のハンドルを再利用できます。 mmLockPagableSectionByHandle 、参照先のセクションが呼び出し元のアドレス空間に存在するかどうかを確認し、存在する場合は、セクションの参照カウントをインクリメントします。 セクションが常駐していない場合は、セクション内 MmLockPagableSectionByHandle ページを開き、システム空間でロックし、参照カウントを 1 に設定します。

システム メモリのリークを回避するには、ドライバーがメモリからアンロードされるときに、ハンドルの参照カウントを 0 にする必要があります。 それ以外の場合、ページング可能なセクションは、ドライバーのアンロード後もシステム メモリにロックされた状態を維持します。

ドライバーがアンロードの準備をしていて、ハンドルの参照カウントが 0 以外の場合、ドライバーは MmUnlockPagableImageSection を呼び出して、アンロードが発生する前にカウントを 0 に減らします。

ドライバーは、MmLockPagableSectionByHandle を呼び出して、IRP で渡されたユーザー バッファーをロックダウンできません。 代わりに、mmProbeAndLockPages 使用してください。

コードとデータのページングの詳細については、「ドライバーのページング可能なを作成する」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー ntddk.h (Ntddk.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI コンプライアンス規則 する HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm)

関連項目

MmLockPagableCodeSection

mmLockPagableDataSection する

mmPageEntireDriver する

MmProbeAndLockPages

mmResetDriverPaging

MmUnlockPagableImageSection