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 | 被动级别 |