Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver para um adaptador de áudio típico deve ser facilmente capaz de suportar várias instâncias da mesma placa 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 de 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 subdispositivo em uma instância específica de uma placa adaptadora deve ter uma cadeia de caracteres de identificação de dispositivo que identifique exclusivamente o subdispositivo em todas as instâncias da mesma placa adaptadora no sistema.
A maneira mais simples de fazer isso é expor cada subdispositivo na placa adaptadora como um dispositivo logicamente distinto para o gerenciador Plug and Play. Isto é apresentado como opção (1) em Dispositivos de áudio multifunções.
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 cuja exclusividade é garantida 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 subdispositivos compartilham um conjunto comum de registradores de configuração, mas cada subdispositivo tem seu próprio conjunto de registradores de endereço base PCI. Os subdispositivos não devem ter dependências ocultas entre si e devem poder funcionar simultaneamente sem interferir uns com os outros ou com outros dispositivos no sistema. Esta é a opção (2) em Dispositivos de áudio multifunções.
Uma terceira abordagem é usar um driver de barramento proprietário para gerir os subdispositivos numa placa adaptadora. Isso é frequentemente necessário se os subdispositivos tiverem dependências mútuas que devem ser gerenciadas centralmente. Tais dependências podem ocorrer de duas maneiras:
Os subdispositivos podem compartilhar algum recurso no cartão. Por exemplo, se os subdispositivos partilharem um processador de sinal digital (DSP), o driver de barramento poderá necessitar de descarregar o sistema operativo proprietário que é executado no DSP antes de iniciar o primeiro subdispositivo.
Uma falha de design pode causar uma dependência entre subdispositivos. Por exemplo, uma falha 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 bus proprietário é quase sempre uma solução melhor do que apresentar os subdispositivos diretamente ao gestor Plug and Play e tentar esconder a dependência.
Se fornecer o seu próprio driver de barramento para uma placa de adaptador, deverá garantir que os IDs de dispositivo que o seu driver de barramento atribui sejam exclusivos em todo o sistema.
Um driver de barramento fornece uma ID de dispositivo para um de seus filhos em resposta a uma consulta de IRP_MN_QUERY_ID do gerenciador Plug and Play. O ID pode ser definido de duas formas, que o controlador de barramento indica na sua resposta a uma consulta IRP_MN_QUERY_CAPABILITIES definindo o campo UniqueID da estrutura DEVICE_CAPABILITIES como TRUE ou FALSE:
UniqueID = VERDADEIRO
Isto significa que o nome da criança é garantido ser único em todo o sistema. A cadeia de caracteres de ID de dispositivo contém uma ID de dispositivo mais uma ID de instância, que é um número de série que identifica exclusivamente a instância de hardware.
UniqueID = FALSO
Isto significa que o nome da criança é único apenas em relação ao progenitor. A maioria dos dispositivos utiliza este meio de identificação. Nesse caso, o gestor Plug and Play estende a cadeia de ID de dispositivo que recebe para torná-la exclusiva em todo o sistema. A cadeia de caracteres estendida é derivada do ID exclusivo do dispositivo pai.
Todos os motoristas de barramento de áudio devem definir UniqueID = FALSE para seus filhos. Isso faz com que o gerenciador Plug and Play estenda a cadeia de caracteres de ID do dispositivo da criança adicionando informações sobre o pai do dispositivo para tornar a ID exclusiva na máquina.