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