Stack di dispositivi WDM di esempio
Questa sezione descrive gli oggetti dispositivo creati da un possibile set di driver per l'hardware USB per illustrare gli oggetti dispositivo WDM e il modo in cui vengono sovrapposti.
La figura seguente illustra gli oggetti dispositivo creati dai driver di esempio descritti in Livelli driver WDM: esempio.
A partire dalla parte inferiore di questa figura, gli oggetti dispositivo negli stack di dispositivi di esempio includono:
Un PDO e un fdO per il bus PCI.
Il driver del bus radice enumera il bus di sistema interno (il bus radice) e crea un PDO per ogni dispositivo trovato. Uno di questi PDO è per il bus PCI. Il PDO e l'fdO per il bus radice non sono visualizzati nella figura.
Il gestore PnP identifica il driver PCI come driver di funzione per il bus PCI, carica il driver (se non è già caricato) e passa il PDO al driver PCI. Nella routine AddDevice , il driver PCI crea un fdO per il bus PCI (IoCreateDevice) e collega l'oggetto FDO allo stack di dispositivi (IoAttachDeviceToDeviceStack) per il bus PCI. Il driver PCI crea e collega questo fdO come parte delle sue responsabilità come driver di funzione per il bus PCI.
In questo esempio non sono presenti driver di filtro per il bus PCI.
Un PDO e un fdO per il controller host USB.
Il manager PnP indirizza il driver PCI all'avvio del dispositivo (IRP_MN_START_DEVICE) e quindi esegue una query sul driver PCI per i relativi elementi figlio (IRP_MN_QUERY_DEVICE_RELATIONS con il tipo di relazione BusRelations). In risposta, il driver PCI enumera i dispositivi nel bus. In questo esempio, il driver PCI trova un controller host USB e crea un PDO per tale dispositivo. La freccia larga nella figura indica che il controller host USB è un "figlio" del bus PCI. Il driver PCI crea PDO per i dispositivi figlio come parte delle proprie responsabilità come driver del bus per il bus PCI.
Il gestore PnP identifica la coppia di driver di classe/miniclasse del controller host USB come driver di funzione per il controller host USB e carica la coppia di driver. Il gestore PnP chiama la coppia di driver al momento appropriato per creare e collegare un fdO per il controller host USB.
In questo esempio non sono presenti driver di filtro per il controller host USB.
Un PDO e un fdO per l'hub USB.
Il controller host USB enumera il bus, individua l'hub USB nella sola porta e crea un PDO per l'hub. Il driver hub USB crea e collega un fdO per l'hub.
In questo esempio non sono presenti driver di filtro per l'hub USB.
Un PDO, un FDO e due DO filtro per il dispositivo joystick.
Il driver dell'hub USB enumera il bus, individua un dispositivo HID (joystick) e crea un PDO per il joystick.
In questo esempio è stato configurato un driver di filtro di livello inferiore nel Registro di sistema per i dispositivi joystick, quindi il gestore PnP carica il driver di filtro. Il driver di filtro determina che è rilevante per il dispositivo e crea e collega un filtro DO allo stack di dispositivi.
Il gestore PnP determina che il driver di funzione per il dispositivo joystick è la coppia di driver di classe/miniclass HID e carica tali driver. La coppia di driver è costituita da un driver miniclasse collegato a una DLL del driver di classe; insieme agiscono come un driver di funzione per il dispositivo. La coppia di driver classe/miniclasse crea un oggetto dispositivo, l'fdO e lo collega allo stack di dispositivi.
Un driver di filtro di livello superiore crea e collega un filtro DO allo stack di dispositivi, in modo simile al filtro di livello inferiore.
Si noti che il PDO creato dal driver del bus padre si trova sempre nella parte inferiore dello stack di dispositivi per un determinato dispositivo. Quando i driver gestiscono PnP o power IRP, devono passare ogni IRP fino in fondo allo stack di dispositivi al PDO e al driver del bus associato.
La figura seguente mostra gli stessi stack di dispositivi della figura precedente, ma sottolinea quali oggetti dispositivo vengono creati e gestiti da quali driver.
Un driver del bus si estende su più di uno stack di dispositivi. Un driver del bus crea l'oggetto FDO per la scheda/controller del bus e crea un PDO per ognuno dei dispositivi figlio.