MmLockPagableSectionByHandle 函式 (ntddk.h)
MmLockPagableSectionByHandle 例程會將可分頁程式代碼或數據區段鎖定為系統記憶體,方法是遞增區段句柄上的參考計數。
語法
void MmLockPagableSectionByHandle(
[in] PVOID ImageSectionHandle
);
參數
[in] ImageSectionHandle
可分頁程式代碼或數據區段的句柄。 呼叫端從先前呼叫 MmLockPagableCodeSection 或 MmLockPagableDataSection 例程取得此句柄。
傳回值
無
備註
驅動程式一開始會呼叫 mmLockPagableCodeSection 或 MmLockPagableDataSection ,以取得可分頁程式代碼或數據區段的句柄。 之後,驅動程式可以呼叫 MmLockPagableSectionByHandle 和 MmUnlockPagableImageSection 來遞增和遞減句柄上的參考計數。
MmLockPagableCodeSection 或 MmLockPagableDataSection 呼叫會將可分頁的區段鎖定到系統記憶體中、將區段的句柄傳回,並將句柄上的參考計數初始化為一。 MmLockPagableSectionByHandle 會將參考計數遞增一, 而 MmUnlockPagableImageSection 會將參考計數遞減一。
如果句柄上的參考計數為非零,則會鎖定可分頁的區段。 如果參考計數為零,則會解除鎖定區段。
只要驅動程式保留在記憶體中載入,可分頁區段的句柄就會保持有效。 驅動程式可以使用相同的句柄來重複鎖定和解除鎖定區段。 也就是說,驅動程式可以重複使用其參考計數為零的句柄。 MmLockPagableSectionByHandle 會檢查參考的區段是否位於呼叫端的位址空間中,如果是的話,只要遞增區段上的參考計數即可。 如果區段不是常駐的, 則區段中的 MmLockPagableSectionByHandle 頁面會將其鎖定在系統空間中,並將參考計數設定為一。
為了避免系統記憶體流失,從記憶體卸除驅動程式時,句柄上的參考計數必須為零。 否則,在驅動程式卸除之後,可分頁區段會持續鎖定到系統記憶體中。
如果驅動程式正在準備卸除,而且句柄上的參考計數為非零,驅動程式應該呼叫 MmUnlockPagableImageSection ,在卸載發生之前將計數遞減為零。
驅動程式無法呼叫 MmLockPagableSectionByHandle 來鎖定傳入 IRP 的用戶緩衝區。 請改用 MmProbeAndLockPages 。
如需分頁程式代碼和數據的詳細資訊,請參閱 讓驅動程式可分頁。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | ntddk.h (包含 Ntddk.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 IrqlMmApcLte (wdm) |