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.
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