Partilhar via


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 de sistema PortCls (Portcls.sys), os drivers de adaptador podem fornecer suporte de software para hardware de áudio configurável dinamicamente.

Por exemplo, a Intel High Definition Audio Specification 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 (HD Audio) através de uma interface HD Audio Link. Um codec de áudio típico suporta detecção de presença de conector: quando um conector é inserido ou removido de uma tomada, o hardware gera uma interrupção para notificar o controlador da alteração na configuração do hardware. Por exemplo, o driver responde à inserção de um conector na tomada de auscultadores criando um filtro KS para representar o subdispositivo de áudio para os auscultadores. O driver atribui recursos de hardware ao filtro (por exemplo, fones de ouvido podem exigir um controle de volume e um conversor digital-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 encontra apenas os dispositivos que estão conectados no momento. Se um dispositivo estiver desligado, não aparece no registo.

No Windows Vista, Windows Server 2003 com Service Pack 1 (SP1) e Windows XP com Service Pack 2 (SP2), o PortCls suporta as interfaces IUnregisterSubdevice e IUnregisterPhysicalConnection . Os drivers do adaptador de áudio usam essas duas interfaces para excluir subdispositivos de áudio que não estão mais em uso. As versões anteriores do Windows, incluindo o Windows Server 2003 e o Windows XP, não suportam estas interfaces. Nessas versões anteriores do Windows, os subdispositivos podem ser criados, mas não excluídos - uma vez que um subdispositivo é criado, ele existe durante o tempo de vida do objeto do 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 através 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 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 controlador de porta possa usar posteriormente as informações para responder às solicitações da 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 subdispositivo com essa parte da topologia. A falha ao cancelar o registro das conexões físicas do subdispositivo pode causar vazamentos de memória. PortCls suporta as 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

Suporte de driver para subdispositivos dinâmicos

Descrições de Conectores para Subdispositivos de Áudio Dinâmicos