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 必须描述锁定的物理页面。 MmProbeAndLockPagesMmAllocatePagesForMdlEx 例程可以生成锁定的 MDL。

[in] CacheType

指定要用于创建映射的 MEMORY_CACHING_TYPE 值。

返回值

MmMapLockedPagesWithReservedMapping 返回指向映射内存开头的指针,或者如果系统无法映射内存,NULL。 仅当函数参数中存在错误(例如,驱动程序的映射地址不足以跨越提供的 MDL)时,此例程才会返回 NULL。 此函数旨在使驱动程序即使在低资源方案中也能取得进展。

言论

调用方可以使用 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