共用方式為


MmMapLockedPagesWithReservedMapping 函式 (wdm.h)

MmMapLockedPagesWithReservedMapping 例程會對應先前由 MmAllocateMappingAddress 例程保留的所有或部分地址範圍。

語法

PVOID MmMapLockedPagesWithReservedMapping(
  [in] PVOID                                                    MappingAddress,
  [in] ULONG                                                    PoolTag,
  [in] PMDL                                                     MemoryDescriptorList,
  [in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);

參數

[in] MappingAddress

保留虛擬記憶體範圍的開頭指標。 這必須是先前由 MmAllocateMappingAddress傳回的位址。

[in] PoolTag

指定保留記憶體緩衝區的集區標記。 這必須與保留緩衝區之呼叫 MmAllocateMappingAddressPoolTag 參數中指定的值相同。

[in] MemoryDescriptorList

要對應的 MDL 指標。 此 MDL 必須描述鎖定的實體頁面。 MmProbeAndLockPagesMmAllocatePagesForMdlEx 例程可以建置鎖定的 MDL。

[in] CacheType

指定要用來建立對應的 MEMORY_CACHING_TYPE 值。

傳回值

MmMapLockedPagesWithReservedMapping 會傳回對應記憶體開頭的指標,如果系統無法對應記憶體,NULL。 只有當函式參數發生錯誤時,這個例程才會傳回 NULL (例如,驅動程式的對應地址不夠大,無法跨越提供的 MDL)。 此函式旨在讓驅動程式即使在低資源案例中也能夠向前推進。

言論

呼叫端可以使用 MmMapLockedPagesWithReservedMapping 來對應 MmAllocateMappingAddress 所保留之虛擬記憶體範圍的子範圍,如下所示:

  • 使用 IoAllocateMdl 來配置 MDL。 傳回的 MDL 是使用要對應之虛擬記憶體範圍的指定起始位址和大小來建置。

  • 使用 MmProbeAndLockPages 來鎖定步驟 1 中取得之 MDL 描述的實體頁面。

  • 使用 MmMapLockedPagesWithReservedMapping 實際將虛擬記憶體對應至步驟 2 中鎖定的實體記憶體。 請注意,此函式傳回的虛擬位址確實包含 MDL 指定的位元移。 不過,此函式所設定之 MDL 的 MappedSystemVa 字段不包含位移。

  • 呼叫端不需要存取記憶體之後,它會使用 MmUnmapReservedMapping取消對應記憶體。 呼叫端可以視需要對應和取消對應記憶體緩衝區,而且必須先取消對應,才能使用 MmFreeMappingAddress釋放對應範圍。

請注意,MappingAddress 參數會指定呼叫端先前保留之內存範圍的開頭,而不是要對應的記憶體子範圍的開頭。 呼叫端會在配置具有ioAllocateMdl 的 MDL 時,指定緩衝區的起始位址和長度。 緩衝區必須符合保留的記憶體範圍,但可以是嚴格的子集。

只有當 MDL 所描述的頁面還沒有相關聯的快取類型時,例程才會使用 CacheType 參數。 不過,在幾乎所有情況下,頁面已經有相關聯的快取類型,而且新對應會使用此快取類型。 此規則的例外狀況是由 MmAllocatePagesForMdl配置的頁面,這些頁面沒有相關聯的特定快取類型。 對於這類頁面,CacheType 參數會決定對應的快取類型。

要求

要求 價值
最低支援的用戶端 適用於 Windows XP 和更新版本的 Windows。
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)

另請參閱

IoAllocateMdl

MEMORY_CACHING_TYPE

mmAllocateMappingAddress

mmAllocatePagesForMdl

mmAllocatePagesForMdlEx

mmFreeMappingAddress

mmProbeAndLockPages

mmUnmapReservedMapping