Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um driver para um adaptador de áudio típico deve ser facilmente capaz de dar suporte a várias instâncias do mesmo cartão de adaptador de áudio em um sistema. Quase todas as estruturas de dados que um driver mantém são armazenadas no buffer de extensão do dispositivo (consulte a descrição do campo DeviceExtension da estrutura DEVICE_OBJECT). No entanto, se várias instâncias de um driver compartilharem dados globais, essas instâncias deverão sincronizar seu acesso a esses dados.
Um requisito adicional é que cada subdevice em uma instância específica de um cartão de adaptador deve ter uma cadeia de caracteres de ID do dispositivo que identifique exclusivamente o subdevice em todas as instâncias do mesmo cartão de adaptador no sistema.
A maneira mais simples de fazer isso é expor cada subdevice no cartão do adaptador como um dispositivo logicamente distinto para o gerenciador de Plug and Play. Isso é apresentado como opção (1) em Dispositivos de Áudio Multifuncionais.
Uma segunda abordagem é usar o driver de barramento multifuncional fornecido pelo sistema para gerenciar os subdispositivos na placa adaptadora. O driver de barramento MF atribui a cada subdispositivo um ID de dispositivo que tem a garantia de ser exclusivo em todo o sistema, mesmo que o sistema contenha várias instâncias da mesma placa adaptadora. O driver de barramento MF acomoda designs nos quais os subdevices compartilham um conjunto comum de registros de configuração, mas cada subdevice tem seu próprio conjunto de registros de endereço base PCI. Os subdevices não devem ter dependências ocultas uns dos outros e devem ser capazes de operar simultaneamente sem interferir uns com os outros ou com outros dispositivos no sistema. Essa é a opção (2) em Dispositivos de Áudio Multifuncionais.
Uma terceira abordagem é usar um motorista de ônibus proprietário para gerenciar os sub-serviços em um cartão de adaptador. Isso é frequentemente necessário se os subdevices tiverem dependências mútuas que devem ser gerenciadas centralmente. Essas dependências podem ocorrer de algumas maneiras:
Os subdevices podem compartilhar algum recurso no cartão. Por exemplo, se os subdispositivos compartilharem um DSP (processador de sinal digital), o driver do barramento poderá precisar baixar o sistema operacional proprietário para ser executado no DSP antes de iniciar o primeiro subdispositivo.
Uma falha de design pode causar uma dependência entre os subdevices. Por exemplo, um defeito de design pode exigir que os subdispositivos sejam ligados ou desligados em uma sequência específica.
Quando existe qualquer tipo de dependência, um driver de barramento proprietário é quase sempre uma solução melhor do que apresentar os subdispositivos diretamente ao Gerenciador Plug and Play e tentar ocultá-la.
Se você fornecer seu próprio motorista de ônibus para um cartão de adaptador, verifique se as IDs do dispositivo atribuídas pelo motorista do ônibus são exclusivas em todo o sistema.
Um motorista de ônibus fornece uma ID de dispositivo para um de seus filhos em resposta a uma consulta IRP_MN_QUERY_ID do gerenciador plug and play. A ID pode ser especificada de duas maneiras, que o motorista do ônibus indica em sua resposta a uma consulta IRP_MN_QUERY_CAPABILITIES definindo o campo UniqueID da estrutura DEVICE_CAPABILITIES como TRUE ou FALSE:
UniqueID = VERDADEIRO
Isso significa que o nome do filho tem a garantia de ser exclusivo em todo o sistema. A cadeia de caracteres de ID do dispositivo contém uma ID do dispositivo mais uma ID de instância, que é um número de série que identifica exclusivamente a instância de hardware.
UniqueID = FALSO
Isso significa que o nome da criança é exclusivo apenas em relação ao pai. A maioria dos dispositivos usa esse meio de identificação. Nesse caso, o Gerenciador de Plug and Play estende o identificador de ID do dispositivo que recebe para torná-lo exclusivo para todo o sistema. A cadeia de caracteres estendida é uma função da ID exclusiva do dispositivo pai.
Todos os motoristas de barramento de áudio devem definir UniqueID = FALSE para seus filhos. Isso faz com que o gerenciador do Plug and Play estenda a cadeia de caracteres de ID do dispositivo filho adicionando informações sobre o pai do dispositivo para tornar a ID exclusiva no computador.