MmLockPagableSectionByHandle 函式 (ntddk.h)

MmLockPagableSectionByHandle 例程會將可分頁程式代碼或數據區段鎖定為系統記憶體,方法是遞增區段句柄上的參考計數。

語法

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

參數

[in] ImageSectionHandle

可分頁程式代碼或數據區段的句柄。 呼叫端從先前呼叫 MmLockPagableCodeSectionMmLockPagableDataSection 例程取得此句柄。

傳回值

備註

驅動程式一開始會呼叫 mmLockPagableCodeSectionMmLockPagableDataSection ,以取得可分頁程式代碼或數據區段的句柄。 之後,驅動程式可以呼叫 MmLockPagableSectionByHandleMmUnlockPagableImageSection 來遞增和遞減句柄上的參考計數。

MmLockPagableCodeSectionMmLockPagableDataSection 呼叫會將可分頁的區段鎖定到系統記憶體中、將區段的句柄傳回,並將句柄上的參考計數初始化為一。 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)

另請參閱

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection