PALLOCATE_COMMON_BUFFER_WITH_BOUNDS回调函数 (wdm.h)
此回调函数为公共缓冲区分配内存并将其映射,以便主设备和 CPU 可以访问该内存。 公共缓冲区可由可选的最小和最大逻辑地址绑定。
语法
PALLOCATE_COMMON_BUFFER_WITH_BOUNDS PallocateCommonBufferWithBounds;
PVOID PallocateCommonBufferWithBounds(
[in] PDMA_ADAPTER DmaAdapter,
[in, optional] PPHYSICAL_ADDRESS MinimumAddress,
[in, optional] PPHYSICAL_ADDRESS MaximumAddress,
[in] ULONG Length,
[in] ULONG Flags,
[in, optional] MEMORY_CACHING_TYPE *CacheType,
[in] NODE_REQUIREMENT PreferredNode,
[out] PPHYSICAL_ADDRESS LogicalAddress
)
{...}
参数
[in] DmaAdapter
指向DMA_ADAPTER结构的指针。 此结构是适配器对象,表示驱动程序的总线主 DMA 设备或系统 DMA 通道。 调用方从对 IoGetDmaAdapter 例程的上一次调用中获取了此指针。
[in, optional] MinimumAddress
指向包含公共缓冲区的最小逻辑地址的变量的指针。 此参数指示应从此地址及其上方的内存中分配缓冲区。 此参数是可选的,可以指定为 NULL 以指示没有最小地址。
[in, optional] MaximumAddress
指向包含公共缓冲区的最大逻辑地址的变量的指针。 此参数指示应从此地址下方的内存中分配缓冲区。 此参数是可选的,可以指定为 NULL 以指示没有最大地址。
[in] Length
要为 DMA 操作分配的公共缓冲区的大小(以字节为单位)。
[in] Flags
要为 DMA 操作分配的公共缓冲区的大小(以字节为单位)。
标志 | 含义 |
---|---|
DOMAIN_COMMON_BUFFER_LARGE_PAGE | 公共缓冲区将使用更大的页面粒度(PAGE_SIZE * 512)进行分配。 请注意,这会增加分配失败的可能性。 |
[in, optional] CacheType
指向 MEMORY_CACHING_TYPE 枚举的指针,指示例程是否必须在要分配的公共缓冲区中启用或禁用缓存内存。 仅支持 MmNonCached 和 MmCached 的值。 参数是可选的,可以指定为 NULL,以指定缓存将取决于硬件平台默认值。
[in] PreferredNode
要从中分配内存的首选 NUMA 节点。 如果 N 是多处理器系统中的 NUMA 节点数, 则 PreferredNode 是介于 0 到 N–1 范围内的数字。 对于单处理器系统或非 NUMA 多处理器系统,请将 PreferredNode 设置为零。
[out] LogicalAddress
指向变量的指针,此例程在其中写入设备可用于访问公共缓冲区的逻辑地址。 DMA 设备应使用此逻辑地址,而不是由例程(如 MmGetPhysicalAddress)返回的物理地址。
返回值
返回 PVOID,它是为公共缓冲区分配的内存的虚拟地址。 如果无法分配缓冲区,则返回 NULL。
注解
此回调函数是 PALLOCATE_COMMON_BUFFER_EX 例程的扩展版本。 以下列表汇总了仅在扩展版本中可用的功能:
调用方可以为要分配的公共缓冲区指定最小逻辑地址。
无论硬件平台如何,调用方都可以提供将遵循的缓存类型替代。
调用方可以指定对其公共缓冲区分配使用更大的粒度。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 版本 1803 |
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h) |
IRQL | PASSIVE_LEVEL |