Enumeração de dispositivos compostos USB
Quando um novo dispositivo USB é conectado a uma máquina host, o driver de barramento USB cria um objeto de dispositivo físico (PDO) para o dispositivo e gera um evento PnP para relatar o novo PDO. Em seguida, o sistema operacional consulta o driver de barramento para obter as IDs de hardware associadas ao PDO.
Para todos os dispositivos USB, o driver de barramento USB relata uma ID de dispositivo com o seguinte formato:
USB\VID_xxxx&PID_yyyy
Os valores xxxx e aa são obtidos diretamente dos campos idVendor e idProduct do descritor do dispositivo, respectivamente.
O driver do barramento também informa um identificador compatível (ID) de USB\COMPOSITE
, se o dispositivo atender aos seguintes requisitos:
O campo de classe de dispositivo do descritor de dispositivo (bDeviceClass) deve conter um valor de zero, ou os campos de classe (bDeviceClass), subclasse (bDeviceSubClass) e protocolo (bDeviceProtocol) do descritor de dispositivo devem ter os valores 0xEF, 0x02 e 0x01, respectivamente, conforme explicado no Descritor de Associação de Interface USB.
O dispositivo deve ter várias interfaces.
O dispositivo deve ter uma única configuração.
O driver de barramento também verifica os campos de classe de dispositivo (bDeviceClass), subclasse (bDeviceSubClass) e protocolo (bDeviceProtocol) do descritor de dispositivo. Se esses campos forem zero, o dispositivo será um dispositivo composto e o driver de barramento informará um identificador (ID) extra compatível de USB\COMPOSITE para o PDO.
Depois que o driver de barramento recupera o hardware e IDs compatíveis para o novo PDO, o sistema operacional pesquisa os arquivos INF. Se um dos arquivos INF contiver uma correspondência para a ID do dispositivo, o Windows carregará esse driver e o driver pai genérico não entrará em ação. Se nenhum arquivo INF contiver a ID do dispositivo e a DOP tiver uma ID compatível, o Windows procurará a ID compatível. Essa pesquisa produz uma correspondência em Usb.inf e faz com que o sistema operacional carregue o driver pai genérico USB (Usbccgp.sys).
Se o dispositivo não tiver as características para gerar um ID compatível de USB\COMPOSITE, você deverá fornecer um arquivo INF que carregue o driver pai genérico. O arquivo INF deve conter uma seção needs/includes que faz referência a Usb.inf.
Se o dispositivo composto tiver várias configurações, o arquivo INF fornecido deverá especificar qual configuração o pai genérico deve usar no Registro. As chaves do Registro necessárias são descritas em Configurando Usbccgp.sys para selecionar uma configuração USB não padrão.