Partilhar via


PSET_DMA_ENGINE_STATE função de retorno de chamada (hdaudio.h)

A rotina SetDmaEngineState define o estado de um ou mais mecanismos DMA para o estado Executando, Parado, Pausado ou Redefinido.

O tipo de ponteiro de função para uma rotina SetDmaEngineState é definido da seguinte maneira.

Sintaxe

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

NTSTATUS PsetDmaEngineState(
  [in] PVOID _context,
  [in] HDAUDIO_STREAM_STATE StreamState,
  [in] ULONG NumberOfHandles,
  [in] PHANDLE Handles
)
{...}

Parâmetros

[in] _context

Especifica o valor de contexto do de contexto membro da estrutura HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2ou HDAUDIO_BUS_INTERFACE_BDL.

[in] StreamState

Especifica o novo estado do fluxo. Defina esse parâmetro como um dos seguintes valores de enumeração HDAUDIO_STREAM_STATE:

  • PauseState (pausado)
  • ResetState (redefinição)
  • RunState (em execução)
  • StopState (parado)
Na implementação atual, PauseState e StopState representam o mesmo estado de hardware.

[in] NumberOfHandles

Especifica o número de identificadores no manipula matriz. Defina esse parâmetro como um valor diferente de zero.

[in] Handles

Ponteiro para uma matriz de identificadores para mecanismos DMA. Especifique um valorNULL não para esse parâmetro.

Valor de retorno

SetDmaEngineState retornará STATUS_SUCCESS se a chamada tiver êxito em alterar os estados dos mecanismos de DMA. Caso contrário, a rotina retornará um código de erro apropriado. A tabela a seguir mostra alguns dos possíveis códigos de status de retorno.

Código de retorno Descrição
STATUS_INVALID_HANDLE
Indica que um dos identificadores é inválido.
STATUS_INVALID_PARAMETER
Indica que um dos valores de parâmetro está incorreto (valor de parâmetro inválido ou ponteiro incorreto).
STATUS_INVALID_DEVICE_REQUEST
Indica que nenhum buffer está alocado no momento para um dos mecanismos de DMA.

Observações

Essa rotina altera o estado de um ou mais mecanismos de DMA para o estado especificado pelo parâmetro streamState. A rotina sincroniza as transições de estado de todos os mecanismos de DMA que os identificadores no manipula identificar a matriz. Para obter mais informações, consulte Sincronizando dois ou mais fluxos.

Antes de chamar essa rotina, configure cada mecanismo de DMA no manipula matriz:

  • Se estiver usando a versão HDAUDIO_BUS_INTERFACE da DDI de áudio HD, chame AllocateDmaBuffer para configurar o mecanismo DMA.
  • Se estiver usando a versão HDAUDIO_BUS_INTERFACE_BDL da DDI, chame SetupDmaEngineWithBdl para configurar o mecanismo DMA.
Se nenhum buffer de DMA estiver alocado no momento para qualquer mecanismo de DMA no manipular matriz, uma tentativa de alterar o fluxo para qualquer estado diferente de Redefinição fará com que a chamada SetDmaEngineState falhe e retorne o código de erro STATUS_INVALID_DEVICE_REQUEST.

O estado do fluxo não pode fazer a transição diretamente entre a execução e a redefinição. Em vez disso, o fluxo deve passar primeiro por um estado intermediário de Pausado ou Parado:

  • Em um estado em execução ou redefinição, o estado do fluxo pode ser alterado diretamente para Pausado ou Parado.
  • De um estado pausado ou interrompido, o estado do fluxo pode ser alterado diretamente para Execução ou Redefinição.
Um driver de áudio do WDM chama essa rotina durante uma chamada para seu método SetState. Por exemplo, consulte IMiniportWaveCyclicStream::SetState.

Requisitos

Requisito Valor
da Plataforma de Destino Área de trabalho
cabeçalho hdaudio.h (inclua Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Consulte também

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl