Subdispositivos de Áudio Dinâmico
Alguns adaptadores de áudio podem alterar dinamicamente suas topologias internas em tempo de execução. Usando os recursos fornecidos pelo sistema no driver do sistema PortCls (Portcls.sys), os drivers de adaptador podem fornecer suporte de software para hardware de áudio configurável dinamicamente.
Por exemplo, a Especificação de Áudio de Alta Definição da Intel usa o termo codec de áudio para se referir a um adaptador de áudio integrado que se conecta a um controlador de Áudio de Alta Definição (ÁUDIO HD) por meio de uma interface de Link de Áudio HD. Um codec de áudio típico dá suporte à detecção de presença de tomada: quando um plugue é inserido ou removido de uma tomada, o hardware gera uma interrupção para notificar o driver da alteração na configuração de hardware. Por exemplo, o driver responde à inserção de um plug-in na tomada de fones de ouvido criando um filtro KS para representar o subdispositivo de áudio para os fones de ouvido. O driver atribui recursos de hardware ao filtro (por exemplo, fones de ouvido podem exigir um controle de volume e um conversor digital para analógico ou DAC) e registra o filtro como um dispositivo de áudio. Quando o usuário desconecta os fones de ouvido, o driver responde liberando os recursos, excluindo o filtro e removendo-o do registro.
Esse comportamento garante que, quando um aplicativo de áudio verifica quais dispositivos de áudio estão registrados, ele localiza apenas os dispositivos conectados no momento. Se um dispositivo estiver desconectado, ele não aparecerá no registro.
No Windows Vista, Windows Server 2003 com Service Pack 1 (SP1) e Windows XP com Service Pack 2 (SP2), PortCls dá suporte às interfaces IUnregisterSubdevice e IUnregisterPhysicalConnection . Os drivers de adaptador de áudio usam essas duas interfaces para excluir subdispositivos de áudio que não estão mais em uso. Versões anteriores do Windows, incluindo o Windows Server 2003 e o Windows XP, não dão suporte a essas interfaces. Nessas versões anteriores do Windows, os subdispositivos podem ser criados, mas não excluídos. Depois que um subdispositivo é criado, ele existe durante o tempo de vida do objeto de driver do adaptador.
A interface IUnregisterSubdevice contém um único método que o driver do adaptador pode usar para "cancelar o registro" de um subdispositivo que o driver registrou por meio de uma chamada anterior para a rotina PcRegisterSubdevice :
IUnregisterSubdevice::UnregisterSubdevice
A interface IUnregisterPhysicalConnection contém três métodos que o driver do adaptador pode usar para cancelar o registro de conexões físicas entre subdispositivos:
IUnregisterPhysicalConnection::UnregisterPhysicalConnection
IUnregisterPhysicalConnection::UnregisterPhysicalConnectionFromExternal
IUnregisterPhysicalConnection::UnregisterPhysicalConnectionToExternal
Esses métodos removem as conexões que o driver registrou por meio de chamadas anteriores para as rotinas PcRegisterPhysicalConnection, PcRegisterPhysicalConnectionFromExternal e PcRegisterPhysicalConnectionToExternal . PortCls armazena as informações de uma chamada PcRegisterPhysicalConnectionXxx para que o driver de porta possa posteriormente usar as informações para responder às solicitações de propriedade KSPROPERTY_PIN_PHYSICALCONNECTION . Ao excluir um subdispositivo da topologia de um adaptador, o driver deve cancelar o registro das conexões físicas do subdevice com essa parte da topologia. A falha ao cancelar o registro das conexões físicas do subdévico pode causar vazamentos de memória. PortCls dá suporte às rotinas PcRegisterXxx no Windows 2000 e posterior.
Os tópicos a seguir nesta seção descrevem como implementar o suporte de driver para adaptadores com topologias dinâmicas:
Gerenciando topologias dinâmicas