共用方式為


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 結構 Context 成員指定內容值。

[in] StreamState

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

  • PauseState (paused)
  • ResetState (reset)
  • RunState (running)
  • 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 引擎:

  • 如果使用 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