Поделиться через


функция обратного вызова 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

Задает значение контекста из элемента контекста context структуры HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2или HDAUDIO_BUS_INTERFACE_BDL.

[in] StreamState

Задает новое состояние потока. Задайте для этого параметра одно из следующих значений перечисления HDAUDIO_STREAM_STATE:

  • PauseState (приостановлено)
  • ResetState (сброс)
  • RunState (выполняется)
  • StopState (остановлено)
В текущей реализации PauseState и StopState представляют то же состояние оборудования.

[in] NumberOfHandles

Указывает количество дескрипторов в обрабатывает массив. Задайте для этого параметра значение, отличное от нуля.

[in] Handles

Указатель на массив дескрипторов в обработчики DMA. Укажите значение, отличное отNULL, для этого параметра.

Возвращаемое значение

SetDmaEngineState возвращает STATUS_SUCCESS, если вызов завершается успешно при изменении состояний обработчиков DMA. В противном случае подпрограмма возвращает соответствующий код ошибки. В следующей таблице показаны некоторые возможные коды состояния возврата.

Возвращаемый код Описание
STATUS_INVALID_HANDLE
Указывает, что один из дескрипторов недопустим.
STATUS_INVALID_PARAMETER
Указывает, что одно из значений параметра неверно (недопустимое значение параметра или неправильный указатель).
STATUS_INVALID_DEVICE_REQUEST
Указывает, что в настоящее время буфер не выделяется для одного из подсистем DMA.

Замечания

Эта подпрограмма изменяет состояние одного или нескольких обработчиков DMA в состояние, указанное параметром streamState. Подпрограмма синхронизирует переходы состояния всех обработчиков DMA, которые дескриптор в обрабатывает массива. Дополнительные сведения см. в разделе Синхронизация двух или нескольких потоков.

Перед вызовом этой процедуры настройте каждый обработчик DMA в обрабатывает массив:

  • Если используется HDAUDIO_BUS_INTERFACE версия HD Audio DDI, вызовите AllocateDmaBuffer для настройки подсистемы DMA.
  • При использовании HDAUDIO_BUS_INTERFACE_BDL версии DDI вызовите SetupDmaEngineWithBdl, чтобы настроить подсистему DMA.
Если буфер DMA в настоящее время не выделяется для любого обработчика DMA в обрабатывает массив, попытка изменить поток на любое состояние, отличное от сброса, приводит к вызову SetDmaEngineState сбой и возврату кода ошибки STATUS_INVALID_DEVICE_REQUEST.

Состояние потока не может переходить непосредственно между выполнением и сбросом. Вместо этого поток должен сначала пройти через промежуточное состояние приостановки или остановки:

  • Из состояния "Запуск" или "Сброс" состояние потока может изменяться непосредственно на "Приостановлено" или "Остановлено".
  • Из приостановленного или остановленного состояния состояние потока может измениться непосредственно на "Запуск" или "Сброс".
Звуковой драйвер WDM вызывает эту подпрограмму во время вызова метода SetState. Например, см. IMiniportWaveCyclicStream::SetState.

Требования

Требование Ценность
целевая платформа Настольный
заголовка hdaudio.h (include Hdaudio.h)
IRQL <=DISPATCH_LEVEL

См. также

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl