MmUnlockPagableImageSection 関数 (wdm.h)
MmUnlockPagableImageSection ルーチンは、以前は MmLockPagableCodeSection、MmLockPagableDataSection、または MmLockPagableSectionByHandle を使用してシステム空間にロックされていたドライバー コードまたはドライバー データのセクションを解放するため、セクションを再度ページアウトできます。
構文
void MmUnlockPagableImageSection(
[in] PVOID ImageSectionHandle
);
パラメーター
[in] ImageSectionHandle
MmLockPagableCodeSection または MmLockPagableDataSection の呼び出しによって返されるハンドルを指定します。
戻り値
なし
解説
ドライバーのページング可能なセクションのハンドルは、ドライバーのデバイス キューまたは内部キューに未処理の IRP がある場合に解放することはできません。 MmUnlockPagableImageSection を呼び出すと、そのセクションのハンドルへの参照がなくなったときに、そのセクション全体のページング可能性が復元されます。
メモリ マネージャーは、セクションへのハンドルの参照カウントを保持します。 ページング可能セクションは、参照カウントが 0 の場合にのみページアウトできます。 すべてのロック要求はカウントをインクリメントします。すべてのロック解除要求はカウントをデクリメントします。 ドライバーはセクションをロックする回数だけセクションのロックを解除して、セクションをページアウトできるようにする必要があります。
数に関係なく、ハンドルは常に有効です。 ハンドルのカウントが 0 で、 MmLockPagableSectionByHandle の呼び出しが行われた場合、カウントは 1 に設定され、セクションがページアウトされている場合は、ページインされます。
ほとんどの場合、 MmUnlockPagableImageSection はドライバーの Unload ルーチンの前に呼び出されます。 つまり、ページング可能なセクションを持つドライバーは、Unload ルーチンが呼び出される前に、DispatchClose ルーチンまたは DispatchShutdown ルーチン呼び出し MmUnlockPagableImageSection を使用する可能性があります。 ただし、ドライバー自体がシステムからアンロードされる前に、ページング可能なセクションを解放するには、アンロード可能なドライバーに注意する必要があります。
コードとデータのページングの詳細については、「ドライバーを ページング可能にする」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | 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) |