PALLOCATE_DOMAIN_COMMON_BUFFER回调函数 (wdm.h)

此回调函数为域公共缓冲区分配内存。

语法

PALLOCATE_DOMAIN_COMMON_BUFFER PallocateDomainCommonBuffer;

NTSTATUS PallocateDomainCommonBuffer(
  [in]           PDMA_ADAPTER DmaAdapter,
  [in]           HANDLE DomainHandle,
  [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,
  [out]          PVOID *VirtualAddress
)
{...}

参数

[in] DmaAdapter

指向DMA_ADAPTER结构的指针。 此结构是适配器对象,表示驱动程序的总线主 DMA 设备或系统 DMA 通道。 调用方从对 IoGetDmaAdapter 例程的上一次调用中获取了此指针。

[in] DomainHandle

调用方从上一次调用获取的 DMA 域 的句柄PGET_DMA_DOMAIN

[in, optional] MaximumAddress

指向包含公共缓冲区的最大逻辑地址的变量的指针。 此参数指示应从此地址下方的内存中分配缓冲区。 此参数是可选的,可以指定为 NULL 以指示没有最大地址。

[in] Length

要为 DMA 操作分配的公共缓冲区的大小(以字节为单位)。

[in] Flags

要为 DMA 操作分配的公共缓冲区的大小(以字节为单位)。

可能的值包括:

  • DOMAIN_COMMON_BUFFER_LARGE_PAGE

    公共缓冲区将使用更大的页面粒度(PAGE_SIZE * 512)进行分配。 请注意,这会增加分配失败的可能性。

[in, optional] CacheType

指向 MEMORY_CACHING_TYPE 枚举的指针,指示例程是否必须在要分配的公共缓冲区中启用或禁用缓存内存。 仅支持 MmNonCachedMmCached 的值。 参数是可选的,可以指定为 NULL,以指定缓存将取决于硬件平台默认值。

[in] PreferredNode

要从中分配内存的首选 NUMA 节点。 如果 N 是多处理器系统中的 NUMA 节点数, 则 PreferredNode 是介于 0 到 N–1 范围内的数字。 对于单处理器系统或非 NUMA 多处理器系统,请将 PreferredNode 设置为零。

[out] LogicalAddress

指向变量的指针,此例程在其中写入设备可用于访问公共缓冲区的逻辑地址。 DMA 设备应使用此逻辑地址,而不是由例程(如 MmGetPhysicalAddress)返回的物理地址。

[out] VirtualAddress

指向变量的指针,此例程在其中写入分配的缓冲区的相应虚拟地址。

返回值

如果调用成功,则返回STATUS_SUCCESS。 否则,它将返回相应的 NTSTATUS 值

要求

要求
最低受支持的客户端 Windows 10
标头 wdm.h (包括 Wdm.h)
IRQL PASSIVE_LEVEL