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 |