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

指定保留内存缓冲区的池标记。 此值必须与对保留缓冲区的 MmAllocateMappingAddress 调用的 PoolTag 参数中指定的值相同。

[in] MemoryDescriptorList

指向要映射的 MDL 的指针。 此 MDL 必须描述锁定的物理页。 锁定的 MDL 可由 MmProbeAndLockPagesMmAllocatePagesForMdlEx 例程生成。

[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)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport)

另请参阅

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping