mmAllocateContiguousMemoryEx 函数 (wdm.h)

MmAllocateContiguousMemoryEx 函数分配一系列物理连续的非分页内存,并返回其虚拟地址。

语法

NTSTATUS MmAllocateContiguousMemoryEx(
  [in]           PSIZE_T          NumberOfBytes,
  [in]           PHYSICAL_ADDRESS LowestAcceptableAddress,
  [in]           PHYSICAL_ADDRESS HighestAcceptableAddress,
  [in]           PHYSICAL_ADDRESS BoundaryAddressMultiple,
  [in]           NODE_REQUIREMENT PreferredNode,
  [in]           ULONG            Protect,
  [in, optional] PVOID            PartitionObject,
  [in]           ULONG            Tag,
  [in]           ULONG            Flags,
  [out]          PVOID            *BaseAddress
);

参数

[in] NumberOfBytes

输入时,提供要分配的字节数。 成功返回后,接收分配的金额。

[in] LowestAcceptableAddress

提供对分配有效的最低物理地址。 例如,如果设备只能引用 8M 到 16MB 范围内的物理内存,则此值将设置为0x800000 (8Mb) 。

[in] HighestAcceptableAddress

提供对分配有效的最高物理地址。 例如,如果设备只能引用低于 16MB 的物理内存,则此值将设置为0xFFFFFF (16Mb - 1) 。

[in] BoundaryAddressMultiple

提供此分配不能交叉的物理地址倍数。

[in] PreferredNode

提供首选节点,如果页面在该节点上可用,则应从该节点进行分配。 MM_ANY_NODE_OK用于表示没有节点首选项。

[in] Protect

提供所需的保护 (包括映射的缓存类型) 。

[in, optional] PartitionObject

如果已指定,则提供要从中分配物理内存的分区对象。 如果未指定,内存将来自系统分区。

[in] Tag

为分配提供 标记。

[in] Flags

各种标志:

  • MM_ALLOCATE_CONTIGUOUS_MEMORY_FAST_ONLY - 仅当可以快速满足所需的连续内存时,才分配所需的连续内存。 如果必须进行长时间的物理内存搜索和交易来满足分配,则失败。

[out] BaseAddress

成功后,接收连续内存的基虚拟地址。

返回值

返回 NTSTATUS 代码。

注解

必须使用 MmFreeContiguousMemory 释放此内存。

要求

要求
最低受支持的服务器 Windows Server 2022
标头 wdm.h
IRQL <= DISPATCH_LEVEL

另请参阅

MmFreeContiguousMemory