IPortWaveRTStream::AllocateContiguousPagesForMdl 方法(portcls.h)

AllocateContiguousPagesForMdl 方法分配连续、非分页、物理内存页的列表,并返回指向描述它们的内存描述符列表(MDL)的指针。

语法

PMDL AllocateContiguousPagesForMdl(
  [in] PHYSICAL_ADDRESS LowAddress,
  [in] PHYSICAL_ADDRESS HighAddress,
  [in] SIZE_T           TotalBytes
);

参数

[in] LowAddress

指定可从中分配 MDL 存储的地址范围的低端。

[in] HighAddress

指定可从中分配 MDL 存储的地址范围的高端。

[in] TotalBytes

指定要为 MDL 分配的字节总数。 此方法始终分配整型内存页数。

返回值

AllocateContiguousPagesForMdl 返回指向描述物理内存页列表的 MDL(PMDL)的指针。 如果方法无法分配请求的缓冲区,它将返回 NULL

言论

驱动程序调用此方法以分配物理连续内存页块。 MDL 中的所有物理内存页都位于 LowAddress 指定的地址范围内,HighAddress 参数。 如果有足够的内存可用,则内存分配是请求的大小向上舍入到下一页;否则,调用将失败。

在系统运行一段时间后,系统的非分页内存池往往变得碎片化,这会增加请求分配大量连续物理内存的概率。 如果音频设备的 DMA 控制器不需要连续的物理内存页,驱动程序必须改为调用 IPortWaveRTStream::AllocatePagesForMdl。 与 AllocateContiguousPagesForMdl不同,AllocatePagesForMdl 方法不受内存碎片的影响。

AllocateContiguousPagesforMdl 方法分配锁定(非分页)但未映射的内存页。 如果微型端口驱动程序需要软件访问此内存,微型端口驱动程序必须随后调用 IPortWaveRTStream::MapAllocatedPages 将页面映射到内核模式地址空间。

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的 Windows作系统中可用。
目标平台 普遍
标头 portcls.h
IRQL 被动级别

另请参阅

IPortWaveRTStream

IPortWaveRTStream::AllocatePagesForMdl

IPortWaveRTStream::MapAllocatedPages