Compartilhar via


Destinos e sincronização de drivers do ACX

Este tópico fornece um resumo dos destinos ACX (Audio Class eXtensions) e da sincronização de drivers.

Para obter informações gerais sobre o ACX, consulte Visão geral das extensões de classe de áudio ACX e Resumo dos objetos ACX. Para obter informações sobre IRPs, consulte IRPs de pacote de solicitação de E/S ACX.

Destinos ACX

O ACX usa WdfIoTarget para facilitar as comunicações entre objetos ACX, circuitos, pinos, fluxos, elementos e fábricas de circuitos. WdfIoTarget é uma abstração do WDF existente para facilitar a comunicação entre duas pilhas diferentes.

Os drivers usam AcxTargetCircuit para se comunicar com um circuito remoto exposto por uma pilha diferente. AcxTargetCircuit é implementado usando um WdfIoTarget.

Os drivers usam AcxTargetPin para se comunicar com o pino de um circuito remoto exposto por uma pilha diferente. AcxTargetPin é implementado usando WdfIoTarget para enviar mensagens para a entidade de pino remoto.

Os drivers usam AcxTargetStream para se comunicar com o fluxo de um circuito remoto exposto por uma pilha diferente. AcxTargetStream é implementado usando um WdfIoTarget para criar um fluxo remoto e alterar o estado do fluxo remoto.

Os drivers usam AcxTargetElement para se comunicar com o elemento de um circuito remoto exposto por uma pilha diferente. AcxTargetElement é implementado usando um WdfIoTarget para enviar mensagens para a entidade de elemento remoto.

Os drivers usam AcxTargetFactoryCircuit para se comunicar com uma instância de fábrica de circuito remoto. AcxTargetFactoryCircuit é implementado usando um WdfTarget para enviar mensagens para a fábrica de circuitos remotos.

Para interagir com o circuito remoto, cada um dos tipos de ACX listados acima suporta:

  • properties
  • métodos
  • events

Todos esses tipos são criados com base nos tipos de objeto WdfIoTarget.

Este diagrama mostra a arquitetura de destino do ACX e a herança dos objetos Driver e Device do WDF.

Diagrama ilustrando a arquitetura de destino do ACX com WDFDRIVER, WDFDEVICE, ACXTARGET, ACXSTREAM, ACXSTREAMFACTORY, ACXTARGETELEMENT e ACXTARGETPIN.

Sincronização e serialização de drivers do ACX

O termo sincronização é um termo geral e é usado para fazer referência às operações necessárias para compartilhar recursos (memória, E/S etc.) entre vários clientes simultâneos.

O termo serialização é usado para fazer referência a um tipo de sincronização para um tipo de objeto (solicitações de E/S, retornos de chamada etc.).

Os drivers do ACX são drivers do WDF, o que significa que a sincronização dos drivers do ACX é baseada nos recursos de sincronização do WDF:

  • O uso de contagens de referência e o modelo de objeto hierárquico.
  • Controle de fluxo configurável por driver para filas de E/S.
  • Bloqueio de apresentação de objeto para objetos de dispositivo e filas de E/S.
  • Serialização automática de plug and play e retornos de chamada de energia.

Para obter uma descrição detalhada da sincronização e da serialização, consulte Usar a sincronização automática. Para obter uma explicação mais completa, consulte o livro Developing Drivers with Windows Driver Foundation da Microsoft Press.

O WDF oferece suporte aos seguintes escopos de sincronização:

  • Sem escopo (padrão na KMDF).
  • Escopo do dispositivo, o WDF adquire o bloqueio de apresentação do objeto de dispositivo para serializar operações.

A fila padrão do ACX é uma fila serial passiva sem bloqueio. O driver deve concluir a operação de E/S antes que a próxima seja entregue.

O ACX não oferece suporte à opção de escopo de fila. Com essa opção, o driver serializa a E/S em uma fila específica. Filas diferentes podem ter escopos de sincronização diferentes.

O ACX não oferece suporte à serialização do escopo do dispositivo. Por padrão, o ACX serializa solicitações usando uma fila de E/S serial sem bloqueio. Cada circuito e objeto de fluxo tem sua própria fila dedicada. Para obter mais informações sobre E/S de streaming, consulte o tópico Streaming do ACX.

Se um driver mantiver um bloqueio, ele nunca deve chamar (explícita ou implicitamente) o código fora de seu controle até que o bloqueio seja liberado.

Para referência histórica, o PortCls original usa um escopo de sincronização como a sincronização de escopo de dispositivo do WDF, em que toda E/S de qualquer subdispositivo de áudio criado nesse dispositivo passa pelo mesmo bloqueio de serialização. Esse tipo de serialização foi, e ainda é, a causa de várias falhas. Em versões posteriores do Windows 10 (versão 1511 - TH2), o PortCls foi atualizado para usar um bloqueio diferente para solicitações de E/S de posição de fluxo.

Confira também

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

Resumo de objetos ACX

Informações de versão ACX

Documentação de referência da ACX

Comunicações entre drivers de pilha múltipla ACX