IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 方法 (portcls.h)

如果要实现 DMA 驱动的事件通知,方法 AllocateAudioBufferWithNotification 为音频数据分配循环缓冲区。 如果不需要事件通知,则必须使用 IMiniportWaveRTStream::AllocateAudioBuffer

语法

NTSTATUS AllocateBufferWithNotification(
  [in]  ULONG               NotificationCount,
  [in]  ULONG               RequestedSize,
  [out] PMDL                *AudioBufferMdl,
  [out] ULONG               *ActualSize,
  [out] ULONG               *OffsetFromFirstPage,
  [out] MEMORY_CACHING_TYPE *CacheType
);

参数

[in] NotificationCount

指定每个缓冲区周期所需的通知数。 有效值为 1 或 2,其中 1 表示循环缓冲区末尾的单个通知,2 表示每个缓冲区周期有两个通知,一个在缓冲区的中间点,一个在末尾。

[in] RequestedSize

指定音频缓冲区的请求大小(以字节为单位)。

[out] AudioBufferMdl

内存描述符列表的输出指针 (描述音频缓冲区的 MDL) 。 此参数指向调用方分配的指针变量,方法将指针写入到 MDL。

[out] ActualSize

分配的缓冲区的实际大小(以字节为单位)的输出指针。 此参数指向一个 ULONG 变量,方法在其中写入大小值。

[out] OffsetFromFirstPage

从 MDL 的第一页开始,缓冲区) 偏移量 (的输出指针(以字节为单位)。 此参数指向调用方分配的 ULONG 变量,方法在其中写入偏移值。

[out] CacheType

指定客户端请求音频缓冲区的缓存类型。 此参数是 MEMORY_CACHING_TYPE 枚举值

返回值

AllocateBufferWithNotification 如果调用成功,则返回STATUS_SUCCESS。 否则,方法将返回相应的错误状态代码。 下表显示了一些可能的错误消息状态代码。

返回代码 说明
STATUS_UNSUCCESSFUL
驱动程序不支持缓冲区属性的指定组合。
STATUS_INSUFFICIENT_RESOURCES
内存不足,无法分配缓冲区。
STATUS_DEVICE_NOT_READY
设备未准备就绪。

注解

注意 Intel 高清晰度音频编解码器的微型端口必须指定 MmWriteCombined 的 CacheType,以确保缓存一致性。 这是因为 Intel 高清晰度音频控制器可能配置为非窥探操作。
 
从客户端收到 KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION 请求后,端口驱动程序调用 AllocateBufferWithNotification 方法以分配一个循环缓冲区,端口驱动程序稍后可以映射到客户端的虚拟地址空间。 AllocateBufferWithNotification 以类似于 IMiniportWaveRTStream::AllocateAudioBuffer 的方式运行。 此外, AllocateBufferWithNotification 向 WaveRT 端口驱动程序标识需要 DMA 驱动的事件通知,并指定循环缓冲区每个周期所需的通知数。

要求

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

另请参阅

IMiniportWaveRTStream::AllocateAudioBuffer

IMiniportWaveRTStreamNotification

KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION

MDL

MEMORY_CACHING_TYPE