Condividi tramite


Modalità di assegnazione degli ID contenitore ai dispositivi USB

Per un dispositivo connesso al computer tramite il bus seriale universale (USB), il diagramma di flusso seguente mostra l'euristica usata per assegnare un ID contenitore a un nodo del dispositivo USB (devnode).

diagramma di flusso che illustra l'euristica dell'ID contenitore per gli sviluppatori USB.

Questa euristica usa informazioni provenienti da diverse origini per determinare se uno dei seguenti è vero su un nodo devnode USB:

  • Devnode rappresenta un nuovo dispositivo nel bus USB? Se questo è vero, devnode riceverà un nuovo ID contenitore.

  • Devnode è un nodo devnode figlio di un dispositivo esistente? In questo caso, devnode erediterà l'ID contenitore del nodo devnode padre.

Un ID contenitore per un dispositivo USB viene generato in diversi modi. Questa decisione si basa sulle informazioni contenute nel dispositivo. Queste informazioni vengono recuperate dalle impostazioni ACPI, dal driver del bus USB e dall'hub USB.

Questa euristica segue questi passaggi per ogni nodo devnode che il manager Plug and Play (PnP) enumera nel bus USB.

  1. Quando viene eseguita una query dal driver del bus USB, il dispositivo USB può segnalare un ID contenitore tramite il descrittore ContainerID del sistema operativo Microsoft.

    A partire da Windows 7, il sistema operativo supporta il descrittore ContainerID del sistema operativo Microsoft. Tramite questo descrittore, il fornitore di hardware indipendente (IHV) può specificare con precisione l'ID contenitore per un dispositivo. Di conseguenza, l'ID contenitore del dispositivo è univoco e non cambia in ogni computer in cui è installato il dispositivo. Inoltre, se segnala un descrittore ContainerID del sistema operativo Microsoft, il dispositivo indica al sistema operativo che tutti gli sviluppatori enumerati fanno parte dello stesso dispositivo fisico.

    Il descrittore ContainerID del sistema operativo Microsoft deve essere usato nei dispositivi che supportano la connessione simultanea del dispositivo tramite più bus di sistema. Ad esempio, una stampante può supportare connessioni di rete USB e IP simultanee usando Plug and Play Extensions (PnP-X). Usando un singolo descrittore ContainerID del sistema operativo Microsoft, lo stesso ID contenitore viene segnalato in entrambi i trasporti. Di conseguenza, il gestore PnP determina che gli elementi devnodes enumerati da ogni bus fanno parte dello stesso dispositivo fisico.

    Per altre informazioni sul descrittore ContainerID del sistema operativo Microsoft, vedere i descrittori del sistema operativo Microsoft.

  2. Se il dispositivo USB non segnala un descrittore ContainerID del sistema operativo Microsoft, il driver dell'hub USB esegue una query ACPI per determinare se il dispositivo è collegato a una porta esterna.

    Il sistema operativo tenta di individuare un oggetto INDIRIZZO ACPI (_ADR) che corrisponde all'indirizzo della porta USB a cui è connesso il dispositivo. Se viene trovato un oggetto indirizzo corrispondente, il sistema operativo esegue la procedura seguente:

    • Viene eseguita una query sull'oggetto delle funzionalità della porta USB (_UPC) e viene controllato il valore PortIsConnectable . Se PortIsConnectable ha un valore diverso da zero 0xFF, la porta può essere usata per connettere dispositivi esterni. Pertanto, qualsiasi dispositivo connesso a questa porta deve essere esterno al computer.

    • Se il computer implementa ACPI 3.0 e il byte PortIsConnectable è diverso da zero, il sistema operativo esegue inoltre una query sull'oggetto descrizione della posizione fisica (_PLD). Il sistema operativo verifica se il bit UserVisible (bit 64) è impostato sull'oggetto _PLD . Questa operazione viene eseguita come controllo aggiuntivo per assicurarsi che la porta sia collegabile ed esternamente visibile all'utente.

    Se le informazioni raccolte da ACPI indicano che il dispositivo è esterno, il gestore PnP genera un ID contenitore per il dispositivo. Il valore ContainedID è un hash del numero di serie USB del dispositivo o un valore generato in modo casuale. A devnode viene assegnato questo ID contenitore.

    Nota Se il sistema operativo determina che il dispositivo è interno al computer, devnode erediterà l'ID contenitore del nodo devnode padre, che in questo caso è l'ID contenitore del computer stesso.

  3. Se ACPI non restituisce un oggetto _ADR che corrisponde all'indirizzo della porta USB a cui è connesso il dispositivo, il gestore PnP genera un ID contenitore in base allo stato rimovibile del nodo devnode.

    Il driver dell'hub USB esegue una query sul descrittore USB RemoveAndPowerMask dall'hub e controlla se il bit DeviceRemovable è impostato per la porta a cui è connesso il dispositivo. Se il bit DeviceRemovable è impostato, i dispositivi collegati alla porta sono rimovibili dall'hub. Se il bit DeviceRemovable non è impostato, i dispositivi collegati alla porta non sono rimovibili dall'hub.

    Il driver del bus USB segnala lo stato rimovibile/non rimovibile alla gestione PnP, che genera un ContainerId per devnode tramite la procedura seguente:

    • Se l'hub indica che i dispositivi collegati alla porta specificata sono rimovibili dall'hub, il gestore PnP determina che i dispositivi collegati a questa porta sono esterni al computer. L'ID contenitore generato per devnode è un hash del numero di serie USB del dispositivo o è un valore generato in modo casuale.

    • Se l'hub indica che i dispositivi collegati alla porta specificata non sono rimovibili dall'hub, il gestore PnP determina che i dispositivi collegati a questa porta sono funzioni secondarie di un dispositivo multifunzione. In questo caso, devnode eredita l'ID contenitore del nodo devnode padre.

Per altre informazioni sull'interfaccia ACPI 3.0, vedere Advanced Configuration and Power Interface Specification Revision 3.0b.