PSET_DMA_ENGINE_STATE回调函数 (hdaudio.h)

SetDmaEngineState 例程将一个或多个 DMA 引擎的状态设置为“正在运行”、“已停止”、“已暂停”或“重置”状态。

SetDmaEngineState 例程的函数指针类型定义如下。

语法

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

NTSTATUS PsetDmaEngineState(
  [in] PVOID _context,
       HDAUDIO_STREAM_STATE StreamState,
  [in] ULONG NumberOfHandles,
  [in] PHANDLE Handles
)
{...}

参数

[in] _context

指定HDAUDIO_BUS_INTERFACEHDAUDIO_BUS_INTERFACE_V2HDAUDIO_BUS_INTERFACE_BDL结构的上下文成员中的上下文值。

StreamState

[in] NumberOfHandles

指定 句柄数组中的句柄 数。 将此参数设置为非零值。

[in] Handles

指向 DMA 引擎句柄数组的指针。 指定此参数的非 NULL 值。

返回值

如果调用成功更改 DMA 引擎的状态,SetDmaEngineState 将返回STATUS_SUCCESS。 否则,例程返回适当的错误代码。 下表显示了一些可能的返回状态代码。

返回代码 说明
STATUS_INVALID_HANDLE
指示其中一个句柄无效。
STATUS_INVALID_PARAMETER
指示其中一个参数值不正确, (无效的参数值或错误的指针) 。
STATUS_INVALID_DEVICE_REQUEST
指示当前没有为其中一个 DMA 引擎分配缓冲区。

注解

此例程将一个或多个 DMA 引擎的状态更改为 streamState 参数指定的状态。 该例程同步句 柄数组中 句柄识别的所有 DMA 引擎的状态转换。 有关详细信息,请参阅 同步两个或多个流

在调用此例程之前,在 句柄 数组中设置每个 DMA 引擎:

  • 如果使用 HD 音频 DDI HDAUDIO_BUS_INTERFACE 版本,请调用 AllocateDmaBuffer 来设置 DMA 引擎。
  • 如果使用 DDI 的HDAUDIO_BUS_INTERFACE_BDL版本,请调用 SetupDmaEngineWithBdl 来设置 DMA 引擎。
如果当前未为 句柄 数组中的任何 DMA 引擎分配 DMA 缓冲区,则尝试将流更改为除 Reset 以外的任何状态会导致 SetDmaEngineState 调用失败并返回错误代码STATUS_INVALID_DEVICE_REQUEST。

流状态无法在“正在运行”和“重置”之间直接转换。 相反,流必须首先通过“已暂停”或“已停止”的中间状态:

  • 从“正在运行”或“重置”状态,流状态可以直接更改为“已暂停”或“已停止”。
  • 从暂停或停止状态中,流状态可以直接更改为“正在运行”或“重置”。
WDM 音频驱动程序在调用 SetState 方法期间调用此例程。 例如,请参阅 IMiniportWaveCyclicStream::SetState

要求

   
目标平台 桌面
Header hdaudio.h (包括 Hdaudio.h)
IRQL <=DISPATCH_LEVEL

请参阅

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl