Enumerazione dei dispositivi compositi USB

Quando un nuovo dispositivo USB è connesso a un computer host, il driver del bus USB crea un oggetto dispositivo fisico (PDO) per il dispositivo e genera un evento PnP per segnalare il nuovo PDO. Il sistema operativo esegue quindi una query sul driver del bus per individuare gli ID hardware associati al PDO.

Per tutti i dispositivi USB, il driver del bus USB segnala un ID dispositivo con il formato seguente:

USB\VID_xxxx&PID_yyyy

Notaxxxx e yyyy sono ricavati direttamente dai campi idVendor e idProduct del descrittore di dispositivo, rispettivamente.

Il driver del bus segnala anche un identificatore compatibile (ID) di USB\COMPOSITE, se il dispositivo soddisfa i requisiti seguenti:

  • Il campo della classe di dispositivo del descrittore di dispositivo (bDeviceClass) deve contenere un valore pari a zero oppure i campi della classe (bDeviceClass), della sottoclasse (bDeviceSubClass) e del protocollo (bDeviceProtocol) del descrittore del dispositivo devono avere i valori rispettivamente 0xEF, 0x02 e 0x01, come illustrato in Descrittore di associazione dell'interfaccia USB.

  • Il dispositivo deve avere più interfacce.

  • Il dispositivo deve avere una singola configurazione.

Il driver del bus controlla anche i campi della classe di dispositivo (bDeviceClass), della sottoclasse (bDeviceSubClass) e del protocollo (bDeviceProtocol) del descrittore del dispositivo. Se questi campi sono zero, il dispositivo è un dispositivo composito e il driver del bus segnala un identificatore compatibile aggiuntivo (ID) di USB\COMPOSITE per il PDO.

Dopo aver recuperato l'hardware e gli ID compatibili per il nuovo PDO, il sistema operativo cerca i file INF. Se uno dei file INF contiene una corrispondenza per l'ID dispositivo, Windows carica il driver indicato da tale file INF e il driver padre generico non entra in gioco. Se nessun file INF contiene l'ID dispositivo e pdo ha un ID compatibile, Windows cerca l'ID compatibile. Ciò produce una corrispondenza in Usb.inf e fa in modo che il sistema operativo carichi il driver padre generico USB (Usbccgp.sys).This produce una corrispondenza in Usb.inf and causes the operating system to load the USB Generic Parent Driver (Usbccgp.sys).

Se vuoi che il driver padre generico gestisca il dispositivo, ma il dispositivo non ha le caratteristiche necessarie per garantire che il sistema generi un ID compatibile di USB\COMPOSITE, dovrai fornire un file INF che carica il driver padre generico. Il file INF deve contenere una sezione needs/includes che fa riferimento a Usb.inf.

Se il dispositivo composito ha più configurazioni, il file INF specificato deve specificare quale configurazione deve essere usata dall'elemento padre generico nel Registro di sistema. Le chiavi del Registro di sistema necessarie sono descritte in Configurazione Usbccgp.sys per selezionare una configurazione USB non predefinita.

Driver padre generico USB (Usbccgp.sys)
Driver USB forniti da Microsoft