PSET_DMA_ENGINE_STATE回调函数 (hdaudio.h)

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

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

语法

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

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

参数

[in] _context

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

[in] StreamState

指定新的流状态。 将此参数设置为以下HDAUDIO_STREAM_STATE枚举值之一:

  • PauseState (已暂停)
  • ResetState (reset)
  • RunState (正在运行)
  • StopState (已停止)
在当前实现中,PauseStateStopState 表示相同的硬件状态。

[in] NumberOfHandles

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

[in] Handles

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

返回值

SetDmaEngineState 如果调用成功更改 DMA 引擎的状态,则返回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

要求

要求 价值
目标平台 桌面
标头 hdaudio.h (包括 Hdaudio.h)
IRQL <=DISPATCH_LEVEL

另请参阅

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl