PSET_DMA_ENGINE_STATE回调函数 (hdaudio.h)

SetDmaEngineState 例程将一个或多个 DMA 引擎的状态设置为 Running、Stopped、Paused 或 Reset 状态。

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_V2 或 HDAUDIO_BUS_INTERFACE_BDL 结构的 Context 成员上下文值。

[in] StreamState

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

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

[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 引擎:

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

流状态不能直接在 Running 和 Reset 之间转换。 相反,流必须首先通过中间状态“已暂停”或“已停止”:

  • 从“正在运行”或“重置”状态开始,流状态可以直接更改为“已暂停”或“已停止”。
  • 从暂停或停止状态开始,流状态可以直接更改为“正在运行”或“重置”。
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