IPortWaveRTStream::AllocatePagesForMdl 方法(portcls.h)
AllocatePagesForMdl
方法分配非分页物理内存页的列表,并返回指向描述它们的内存描述符列表(MDL)的指针。
语法
PMDL AllocatePagesForMdl(
[in] PHYSICAL_ADDRESS HighAddress,
[in] SIZE_T TotalBytes
);
参数
[in] HighAddress
指定可从中分配 MDL 存储的地址范围的高端。 地址范围的低端隐式为零。
[in] TotalBytes
指定要为 MDL 分配的字节总数。 此方法始终分配整型内存页数。
返回值
AllocatePagesforMdl
返回指向描述物理内存页列表的 MDL 的指针。 如果方法无法分配请求的缓冲区,它将返回 NULL。
言论
由于 Windows 音频堆栈不支持一种机制来表达缓冲区的内存访问对齐要求,因此音频驱动程序必须为映射的内存缓冲区选择缓存类型,这些缓存类型不会施加特定于平台的对齐要求。 换句话说,音频驱动程序用于映射内存缓冲区的缓存类型不得假设任何特定平台的内存对齐要求。
驱动程序调用此方法来分配可以映射到用户或内核模式的内存。 MDL 中的物理内存页不一定在物理内存中连续,但它们都属于指定的地址范围。
该方法始终分配整数页数。 如果有足够的内存可用,则内存分配是请求的大小向上舍入到下一页。 否则,内存分配可以小于请求的大小。 调用方必须验证实际分配的字节数。
如果音频设备的 DMA 控制器要求缓冲区中的物理内存页是连续的,驱动程序必须改为调用 IPortWaveRTStream::AllocateContiguousPagesForMdl 。
与 mmAllocatePagesForMdl 函数一样,AllocatePagesforMdl
方法分配锁定(非分页)但未映射的内存页。 如果微型端口驱动程序想要设置对此内存的软件访问,微型端口驱动程序必须随后调用 IPortWaveRTStream::MapAllocatedPages 将页面映射到内核模式地址空间。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 普遍 |
标头 | portcls.h |
IRQL | 被动级别 |