共用方式為


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 開始提供。
目標平臺 普遍
標頭 ntddk.h (包括 Ntddk.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)IrqlMmApcLte(wdm)

另請參閱

mmLockPagableCodeSection

mmLockPagableDataSection

mmPageEntireDriver

mmProbeAndLockPages

mmResetDriverPaging

mmUnlockPagableImageSection