Modalità di generazione degli ID del contenitore dalla capacità del dispositivo rimovibile

Se un driver di bus non può fornire un ID contenitore per un nodo del dispositivo (devnode) che sta enumerando, il gestore Plug and Play (PnP) usa la funzionalità di dispositivo rimovibile per generare un ID contenitore per tutti i devnode enumerati per il dispositivo. Per altre informazioni sulla funzionalità di dispositivo rimovibile, vedere Panoramica della funzionalità del dispositivo rimovibile.

L'euristica seguente descrive in che modo gli ID del contenitore vengono generati dalla capacità del dispositivo rimovibile:

  1. Se devnode ha la funzionalità di dispositivo rimovibile impostata su TRUE, generare un nuovo ID contenitore per devnode.

  2. Se il devnode ha la funzionalità di dispositivo rimovibile impostata su FALSE, ereditare l'ID contenitore dal nodo devnode padre.

Un devnode non può enumerare i devnode figlio finché non viene inizializzato e lo stack di driver viene avviato. Non appena il relativo ID contenitore viene assegnato durante l'inizializzazione, devnode è pronto per propagare il relativo ID contenitore a qualsiasi dei relativi elementi figlio non rimovibili durante l'enumerazione.

Un devnode con la funzionalità di dispositivo rimovibile impostata su TRUE viene considerato il devnode principale (padre) per il dispositivo e viene generato un ID contenitore per questo devnode.

Tutti gli elementi figlio di questo nodo padre devnode ereditano lo stesso ID del contenitore, a meno che essi stessi non abbiano la funzionalità del dispositivo rimovibile impostata su TRUE. In questo caso, a un nodo devnode figlio rimovibile viene assegnato un ID contenitore diverso e diventa il nodo devnode padre di questo dispositivo rimovibile. Tutti i nodi figlio di tale devnode ereditano lo stesso ID contenitore.

Si supponga, ad esempio, che un mouse a funzione singola sia connesso al computer tramite USB. In questo caso, il driver del bus USB rileva un nuovo dispositivo e rileva che si tratta di un dispositivo HID (Human Interface Device) USB. Il driver del bus USB crea quindi un devnode USB HID per il dispositivo. Il devnode HID rileva anche che il dispositivo HID è un mouse e crea un devnode figlio per un mouse conforme HID

L'applicazione di questa euristica a questo esempio comporta le azioni seguenti:

  1. Viene creato il devnode USB HID. La funzionalità di dispositivo rimovibile è impostata su TRUE in questo devnode perché il nodo devnode dell'hub USB padre ha riconosciuto che è stato collegato a una porta USB rivolta verso l'esterno.

  2. Viene creato un ID contenitore per questo devnode perché è il devnode più alto di un dispositivo rimovibile. Di conseguenza, questo devnode viene considerato il devnode padre per il dispositivo rimovibile.

  3. Viene creato il devnode del mouse conforme HID. La funzionalità del dispositivo rimovibile è impostata su FALSE in questo devnode perché il devnode USB HID padre segnala tutti i relativi elementi figlio come non rimovibili. In questo caso, il nodo devnode del mouse conforme a HID eredita l'ID contenitore del nodo devnode padre.

Tramite questa euristica, lo stesso ID contenitore viene assegnato a ogni nodo devnode che appartiene al mouse. Il manager PnP raggruppa correttamente i devnodes in un dispositivo logico, anche quando non è presente alcun identificatore univoco per il dispositivo.

Nota

Il successo di questa euristica si basa su un driver bus specifico che segnala correttamente la funzionalità di dispositivo rimovibile per ogni devnode che enumera. Il driver del bus deve assicurarsi che il nodo devnode padre del dispositivo deve essere impostato come rimovibile e i relativi devnodes figlio non devono essere impostati come rimovibili.