Compartilhar via


Fábricas de Filtros

Um driver de adaptador de áudio fornece fábricas de filtros para gerenciar a instanciação de filtros. Cada fábrica de filtros pode instanciar um ou mais filtros KS de um tipo específico. Se um tipo de filtro encapsular uma função de hardware específica, o número de filtros desse tipo que a fábrica pode instanciar será limitado pelos recursos de hardware subjacentes.

Como uma fábrica de filtros gerencia um bloco de funcionalidade de hardware em grande parte autônomo, cada fábrica de filtros pode ser considerada um driver de dispositivo por si só. Na verdade, o termo driver do adaptador, como é usado no parágrafo anterior, refere-se a uma coleção de drivers relacionados – fábricas de filtros – que são empacotados juntos para gerenciar as várias funções de hardware em um adaptador cartão.

Assim como acontece com qualquer outro driver WDM (Modelo de Driver do Microsoft Windows), uma fábrica de filtros lida com a funcionalidade de instalação e gerenciamento de energia. Durante a instalação, o arquivo INF do driver registra um ou mais nomes de dispositivo de filtro (consulte Cadeias de caracteres de identificação do dispositivo). Esse processo carrega os nomes no registro do sistema e associa cada fábrica de filtros a uma ou mais categorias de filtro KS, conforme descrito em Instalando interfaces de dispositivo para um adaptador de áudio. Todos os dispositivos de áudio são classificados em KSCATEGORY_AUDIO, mas um dispositivo de áudio também pode ser classificado em categorias adicionais, como KSCATEGORY_RENDER (para um dispositivo de renderização de áudio) ou KSCATEGORY_CAPTURE (para um dispositivo de captura de áudio). O driver anuncia as funcionalidades gerais de um dispositivo por meio das várias categorias sob as quais ele registra o filtro para esse dispositivo. Quando o driver do sistema SysAudio, por exemplo, requer um dispositivo de áudio de um tipo específico, ele procura no Registro dispositivos que se enquadram nas categorias apropriadas.

O sistema operacional usa a API de Instalação, conforme descrito em Componentes de Instalação do Dispositivo, para descobrir e enumerar todas as fábricas de filtros KSCATEGORY_AUDIO no registro. A entrada do Registro para cada fábrica especifica o nome amigável da fábrica de filtros e seu nome de dispositivo, que é uma cadeia de caracteres longa que um cliente passa para a chamada create-file que instancia o filtro. Essa chamada pode ser feita para ZwCreateFile do modo kernel ou para CreateFile do modo de usuário. Um filtro é um objeto do modo kernel e é identificado por um identificador de kernel. A chamada create-file retorna um identificador de instância que os clientes podem usar para fazer referência ao filtro. Os clientes do modo de usuário ou upstream filtros no grafo de áudio podem usar esse identificador para enviar ou encaminhar solicitações IOCTL para o filtro. Para obter mais informações sobre CreateFile, consulte a documentação do SDK do Microsoft Windows.

Um adaptador de áudio WDM típico cartão pode residir em um barramento PCI, por exemplo, e conter vários conectores de E/S para renderizar ou capturar dados de onda. Um único dispositivo de áudio neste cartão pode conter tomadas de áudio analógicas para conduzir um conjunto de alto-falantes e um cabo de lineout, e tomadas de áudio analógicas para receber sinais de um microfone e um cabo de linein. O sistema de áudio WDM representa o dispositivo como um filtro e representa as tomadas de áudio como pinos nesse filtro.

O filtro para um dispositivo de áudio é implementado como drivers separados de porta e miniport que são associados para agir em uníssono:

  • O driver de miniporto contém o código específico do hardware.

  • O driver de porta contém o código genérico que é comum a todos os filtros de um tipo específico.

O fornecedor grava o driver de miniporto, que contém todo o código proprietário que o filtro precisa para gerenciar o hardware de áudio. O sistema operacional fornece o driver de porta, que é acessível por meio do driver do sistema PortCls (Portcls.sys; consulte Driver do Adaptador de Classe de Porta e Driver do Sistema PortCls). Dividir a implementação do filtro em drivers de porta e miniporta simplifica a tarefa de gravar um driver para um dispositivo proprietário.

Quando uma fábrica de filtros instancia um filtro, ele cria primeiro o objeto de driver de miniport para o filtro. Em seguida, a fábrica de filtros cria uma instância do objeto de porta apropriado e associa o objeto de driver de miniport a essa instância para formar um filtro totalmente funcional. O exemplo de código na Criação de Subdispositivos ilustra esse processo. Os drivers de porta e de miniporte se comunicam entre si por meio de interfaces de software bem definidas. Para obter mais informações sobre essas interfaces, consulte Miniport interfaces e Suporte a um dispositivo.

Um filtro de áudio expõe a estrutura do dispositivo de áudio subjacente como uma coleção de fábricas de pinos, nós e conexões internas. O driver de miniporto consolida essas informações em um descritor de filtro, que é uma estrutura do tipo PCFILTER_DESCRIPTOR. Essa estrutura, por sua vez, contém descritores individuais para fábricas de pinos, nós e conexões internas do filtro. Esses descritores são estruturas dos seguintes tipos:

PCPIN_DESCRIPTOR

PCNODE_DESCRIPTOR

PCCONNECTION_DESCRIPTOR

Para obter o descritor de filtro do driver de miniporto, o driver de porta chama o método IMiniport::GetDescription .

Para obter um exemplo de como um driver configura sua estrutura de PCFILTER_DESCRIPTOR, consulte o driver de exemplo do Sysvad, que é discutido em Drivers de Áudio de Exemplo.