Introdução à classe Port
A maioria dos drivers de hardware para dispositivos de áudio baseados em PCI e DMA baseia-se na biblioteca classe de porta, que é acessível por meio do driver do sistema PortCls (Portcls.sys). PortCls é um driver de classe de porta de áudio que a Microsoft inclui como parte do sistema operacional. PortCls fornece um conjunto de drivers de porta que implementam a maior parte da funcionalidade de filtro de KS (streaming de kernel genérico). Portanto, PortCls simplifica a tarefa do desenvolvedor do driver de áudio. O fornecedor de hardware só precisa fornecer um conjunto de drivers de miniporta para lidar com as funções específicas de hardware de um adaptador de áudio.
Embora os fornecedores de hardware tenham a opção de implementar seus próprios filtros KS para seus dispositivos de áudio, essa opção é difícil e desnecessária para dispositivos de áudio típicos. Você pode desenvolver um filtro KS para estar em conformidade com Stream.sys, o driver de classe Stream ou Avstream.sys, o driver de classe AVStream. Mas um filtro KS baseado em Stream.sys não pode aproveitar as melhorias que só estão disponíveis no AVStream. Para obter mais informações sobre filtros KS e PortCls, consulte Introdução com drivers de áudio WDM.
A implementação interna de PortCls pode evoluir para aproveitar as melhorias de streaming de kernel em versões sucessivas do Windows, enquanto mantém a compatibilidade com os drivers existentes.
PortCls é implementado no arquivo do sistema Portcls.sys como um driver de exportação (uma DLL no modo kernel) e contém os seguintes itens:
Um conjunto de funções auxiliares que podem ser chamadas pelo driver do adaptador
Uma coleção de drivers de porta de áudio
É responsabilidade do fornecedor de hardware de um dispositivo de áudio fornecer um driver de adaptador. O driver do adaptador inclui a inicialização e o código de gerenciamento de driver de miniporta (incluindo a função DriverEntry ) e uma coleção de drivers de miniporto de áudio .
Quando o sistema operacional carrega o driver do adaptador, o driver do adaptador cria um conjunto de objetos de driver de miniporta e solicita que o driver do sistema PortCls crie um conjunto correspondente de objetos de driver de porta. (O exemplo de código na Criação de Subdispositivos ilustra esse processo.) Normalmente, esses drivers de porta são um subconjunto daqueles que estão disponíveis no arquivo Portcls.sys. Cada driver de miniporta se associa a um driver de porta correspondente de Portcls.sys para formar um driver de subdispositivo completo. O driver de subdispositivo de porta e miniporta de combinação é um filtro KS (consulte Filtros de áudio). Por exemplo, um driver de adaptador típico pode conter três drivers de miniporto: WaveRT, DMusUART e Topology (com interfaces IMiniportWaveRT, IMiniportDMus e IMiniportTopology ). Durante a inicialização, esses drivers de miniporto são associados aos drivers de porta WaveRT, DMus e Topology (com interfaces IPortWaveRT, IPortDMus e IPortTopology ) contidos no arquivo Portcls.sys. Cada um desses três drivers de subdispositivo assume a forma de um filtro KS. Os três filtros juntos expõem a funcionalidade completa do adaptador de áudio.
Normalmente, os drivers de porta fornecem a maior parte da funcionalidade para cada classe de subdispositivo de áudio. Por exemplo, o driver de porta WaveRT faz a maior parte do trabalho necessário para transmitir dados de áudio para um dispositivo de áudio baseado em DMA, enquanto o driver de miniporto fornece detalhes específicos do dispositivo, como o endereço DMA e o nome do dispositivo.
Drivers de adaptador de áudio e drivers de miniporta normalmente são escritos no Microsoft C++ e fazem uso extensivo de interfaces COM. A arquitetura do driver port-miniport promove o design modular. Os gravadores de driver miniport devem implementar seu driver como uma classe C++ derivada da interface IMiniport , que é definida no arquivo de cabeçalho Portcls.h. A inicialização de hardware ocorre no tempo de carregamento do driver, normalmente no método Init da classe derivada de IMiniport (por exemplo, IMiniportWaveRT::Init). Para obter mais informações sobre implementações COM de drivers de miniporta de áudio, consulte COM no Kernel.
O diagrama a seguir ilustra a relação entre drivers de porta e miniporta e sua posição na pilha de áudio.
No diagrama anterior, o componente KSEndpoint é um arquivo fornecido pelo sistema fornecido com o Windows Vista e versões posteriores do Windows. Esse componente é fornecido na forma de uma DLL (Audiokse.dll). KSEndpoint abstrai o ponto de extremidade do dispositivo no modo kernel e fornece ao mecanismo de áudio acesso ao ponto de extremidade abstraído. Para obter mais informações sobre o mecanismo de áudio, consulte Explorando o Mecanismo de Áudio do Windows Vista.
A legenda no diagrama anterior mostra as caixas que representam os componentes de driver fornecidos pelo fornecedor. Observe que a borda superior de cada driver de miniporta interfaces para a borda inferior de cada driver de porta. Por exemplo, o driver de porta WaveRT expõe uma interface IPortWaveRT para o driver de miniporto WaveRT, que expõe uma interface IMiniportWaveRT para o driver de porta. Essas interfaces às vezes são chamadas de interfaces de borda superior e de borda inferior .
A classe de porta e os drivers de classe AVStream são semelhantes, pois ambos são drivers WDM e ambos dão suporte à arquitetura de streaming de kernel do WDM. No entanto, os drivers de classe de porta diferem dos drivers de classe AVStream nas áreas de manipulação e reentrância de vários processadores. Os drivers de classe de porta fazem o seguinte:
Use uma abordagem de três camadas que combina o driver de classe, os drivers de porta e os drivers de miniporto fornecidos pelo fornecedor.
Tenha um número restrito de funções de áudio, permitindo que os drivers de miniporto operem mais perto do hardware de áudio.
Permitir que vários drivers de porta ou miniporto sejam vinculados a um dispositivo específico. Esse recurso permite um melhor suporte para cartões multifuncionais.
Não dê suporte a barramentos externos (por exemplo, USB). Todos os drivers de porta dão suporte a dispositivos que residem nos barramentos do sistema (PCMCIA e PCI).
A terminologia para descrever portas de áudio WDM e drivers de miniporta difere em alguns aspectos dos termos usados para outras classes de drivers do Windows. Essas diferenças são explicadas na Terminologia de Áudio do WDM.
Esta seção discute os seguintes tópicos: