функция обратного вызова 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 (reset)
  • 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 в массиве дескрипторов , попытка изменить поток на любое состояние, отличное от 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