Compartilhar via


IRPs de pacote de solicitação de E/S ACX

Este tópico fornece um resumo dos pacotes de solicitação IRPs das Audio Class Extensions (ACX).

Para obter informações gerais sobre o ACX, consulte a visão geral das extensões de classe de áudio ACX e o resumo dos objetos ACX. Para obter informações sobre destinos ACX e sincronização de driver, consulte destinos ACX e sincronização de driver.

Encaminhamento de solicitação IRP

Um cliente ACX especifica uma ação por meio de uma solicitação de driver (IRP). Para obter informações gerais sobre IRPs, consulte pacotes de solicitação de E/S e Packet-Driven E/S com IRPs reutilizáveis.

O cliente envia essa solicitação para um circuito/pin/elemento/fluxo usando o circuito ou o identificador de fluxo. A ID da solicitação é um trigêmeo:

  • conjunto (GUID)
  • id/index (ulong)
  • valor opcional de pin-id/node-id (ulong).

No momento da criação, o driver pode associar opcionalmente propriedades/métodos/eventos a um dos seguintes objetos:

  • fixar
  • circuito
  • fluxo
  • elemento

Cada propriedade/método/evento é identificado por uma ID e um manipulador de retorno de chamada. Por padrão, o ACX define todas as propriedades/métodos/eventos exigidos por KS-clients (camadas de modo de usuário), portanto, os drivers não precisam redefini-los. Os drivers só precisam definir suas propriedades/métodos/eventos personalizados.

Quando o ACX recebe uma solicitação IoCtrl de estilo ACX/KS, ele valida a solicitação e bloqueia os buffers do chamador na memória. Essa validação e o bloqueio do buffer são feitos em um retorno de chamada de pré-processamento do WDM que o ACX registrou no momento da inicialização. Durante essa fase, o ACX adiciona seu próprio callback de conclusão ao IRP do WDM antes de encaminhá-lo de volta ao WDF para processamento normal. A conclusão do callback dá ao ACX a chance de adicionar/injetar quaisquer soluções alternativas de compatibilidade conforme necessário.

Em seguida, o WDF invoca o retorno de chamada de despacho dinâmico IRP, neste retorno de chamada ACX/driver (opcionalmente) associa uma fila do WDF à solicitação. Neste retorno de chamada, o ACX localiza o objeto ACX de destino: circuito, pino, elemento de circuito ou fluxo usando o manipulador no qual essa solicitação foi enviada e o 'pin-id'/'node-id'/'circuit-element' opcional dentro da solicitação.

Em um dispositivo de composição de áudio, é possível que o objeto de destino (somente circuito) esteja localizado em uma pilha diferente daquela na qual a solicitação é enviada originalmente. Além disso, uma solicitação pode precisar agir em várias pilhas; um exemplo disso é uma alteração do estado de fluxo.

Depois que o destino for identificado, o ACX verificará se o circuito/objeto de fluxo de destino especifica uma substituição para a fila de processamento padrão, caso contrário, o ACX usará a fila padrão associada ao manipulador atual. O ACX/driver instrui o WDF a inserir a solicitação na fila, seja na especificada ou na padrão.

Em seguida, o WDF invocará o retorno de chamada no processo do chamador, se houver. O ACX não precisa/usa o retorno de chamada no processo de chamador porque ele já bloqueou os buffers na memória no retorno de chamada pré-processo. Assim, o ACX informa ao WDF para não invocar o callback em processo depois de especificar a fila de destino para a solicitação.

Uso de fila secundária

A fila ACX padrão é uma fila gerenciada por energia, serial e sem bloqueio. O driver deve mover qualquer solicitação que leva tempo indeterminado para uma fila secundária. A fila gerenciada pelo driver pode ser uma fila manual-passiva, em que o driver pode manter essas solicitações até que ele esteja pronto para concluí-las mais tarde.

Solicitações de referência de energia

O ACX ativa automaticamente o dispositivo antes de enviar uma solicitação para o driver. Isso é feito implicitamente usando filas com gerenciamento de energia do WDF. Isso cria um comportamento semelhante ao portcls. Ou seja, uma referência de potência é feita antes de expedir a solicitação.

Invocando o manipulador de despacho da fila

Em seguida, o WDF utiliza uma referência de potência e invoca o manipulador de despacho da fila. A fila padrão associada ao manipulador ACX verifica se há substituições de pré-processo e, se houver, o ACX invoca o retorno de chamada pré-processo do driver registrado. O ACX permite que o driver especifique sobreposições com base no tipo de solicitação (propriedade, evento e método) e, opcionalmente, IDs de solicitação.

Se um retorno de chamada de pré-processamento foi especificado, depois que o ACX invoca o retorno de chamada, a requisição passa a ser gerida pelo driver. O driver pode concluir a solicitação ou encaminhá-la de volta para o ACX para expedição normal.

Se um retorno de chamada de pré-processamento não tiver sido especificado ou se o driver devolver a solicitação ao ACX, o ACX consulta o objeto de destino chamado ACX e localiza o retorno de chamada da propriedade/evento/método declarado. Em seguida, ele invoca o callback passando a solicitação WDF e o objeto ACX de destino (circuito/fluxo/elemento-circuito).

O ACX seguinte (ou, no caso de propriedades personalizadas, o driver) executa a ação solicitada e conclui a solicitação, ou, se a solicitação levar um tempo indeterminado, o driver pode movê-la para uma fila secundária. O driver é responsável por serializar e concluir quaisquer solicitações pendentes ativas.

Este diagrama ilustra o fluxo de trabalho típico de expedição de solicitação.

Diagrama que ilustra o fluxo de trabalho de despacho com serviço de áudio, WDF, ACX e um driver.

Este diagrama ilustra o fluxo de trabalho de despacho quando o driver tem um callback de pré-processamento ACX definido, embora no final a solicitação seja tratada pelo framework ACX.

Diagrama que ilustra o fluxo de trabalho de despacho com o serviço de áudio, WDF, ACX e um driver com callback de pré-processamento.

Interfaces internas PnP do circuito ACX

Para facilitar a comunicação entre o EM (ACX Endpoint Manager) e os componentes do driver ACX (componentes do modo kernel ou do modo de usuário), o ACX define as seguintes interfaces internas do dispositivo PnP:

  • ACXCATEGORY_CIRCUITFACTORY
  • ACXCATEGORY_CIRCUITO

O EM usa a interface ACXCATEGORY_CIRCUITFACTORY para instruir um dispositivo de destino a criar ou remover um circuito específico desse tipo. Essa interface está ativa enquanto o dispositivo sublinhado é capaz de criar circuitos, caso contrário, está desabilitado (exemplo: remoção, remoção surpresa, parada ou remoção manual).

O subsistema de áudio usa o ACXCATEGORY_CIRCUIT (que pode ser criado em uma pilha de dispositivos diferente da pilha do gerenciador de circuito) para monitorar e se comunicar com o circuito ACX. Essa interface está ativa quando o circuito foi criado e está pronto para processar comandos.

Para obter informações sobre outros processos de energia e PnP, consulte enumeração de dispositivo ACX e gerenciamento de energia ACX.

Consulte também

Visão geral de extensões de classe de áudio ACX

Documentação de referência da ACX

Resumo dos objetos ACX

Informações de versão do ACX

Comunicações entre driver de várias pilhas do ACX