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_V2HDAUDIO_BUS_INTERFACE_BDL結構之Context成員的內容值。

[in] StreamState

指定新的數據流狀態。 將此參數設定為下列其中一個HDAUDIO_STREAM_STATE列舉值:

  • PauseState (暫停)
  • ResetState (重設)
  • 執行) 的 RunState (
  • StopState (已停止)
在目前的實作中, PauseStateStopState 代表相同的硬體狀態。

[in] NumberOfHandles

指定 柄陣列中的句柄數目。 將此參數設定為非零值。

[in] Handles

DMA 引擎句柄陣列的指標。 指定此參數的非 NULL 值。

傳回值

如果呼叫成功變更 DMA 引擎的狀態,SetDmaEngineState 會傳回STATUS_SUCCESS。 否則,例程會傳回適當的錯誤碼。 下表顯示一些可能的傳回狀態代碼。

傳回碼 Description
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。

數據流狀態無法在 [執行中] 和 [重設] 之間直接轉換。 相反地,數據流必須先通過已暫停或已停止的中繼狀態:

  • 從 [執行中] 或 [重設] 狀態,串流狀態可以直接變更為 [已暫停] 或 [已停止]。
  • 從暫停或停止的狀態,串流狀態可以直接變更為 [執行中] 或 [重設]。
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