Quando vengono creati oggetti dispositivo WDM?
In questa sezione viene descritto ogni tipo di oggetto dispositivo e viene menzionato quando ogni oggetto viene creato.
La figura seguente illustra i possibili tipi di oggetti dispositivo che possono essere collegati in uno stack di dispositivi, che rappresenta i driver che gestiscono le richieste di I/O per un dispositivo.
A partire dalla parte inferiore di questa figura:
Un driver del bus crea un oggetto PDO per ogni dispositivo che enumera nel suo bus.
Un driver del bus crea un oggetto PDO per un dispositivo figlio quando enumera il dispositivo. Un driver del bus enumera un dispositivo in risposta a una richiesta di IRP_MN_QUERY_DEVICE_RELATIONS per busRelations dal gestore PnP. Il driver del bus crea un oggetto PDO per un dispositivo figlio se il dispositivo è stato aggiunto al bus dall'ultima volta che il driver del bus ha risposto a una richiesta di relazioni di query per BusRelations (o se si tratta della prima richiesta di relazioni query dal momento dell'avvio del computer).
Un oggetto PDO rappresenta il dispositivo al driver del bus, nonché ad altri componenti di sistema in modalità kernel, ad esempio power manager, gestione PnP e gestione I/O.
Altri driver per un dispositivo allegano oggetti dispositivo sopra il PDO, ma il PDO è sempre nella parte inferiore dello stack di dispositivi.
I driver di filtro del bus facoltativi creano DO di filtro per ogni dispositivo filtrato.
Quando il gestore PnP rileva un nuovo dispositivo in un elenco BusRelations , determina se sono presenti driver di filtro del bus per il dispositivo. In tal caso, per ogni driver il gestore PnP garantisce che venga caricato (chiama DriverEntry se necessario) e chiama la routine AddDevice del driver. Se il driver di filtro del bus filtra le operazioni per questo dispositivo, il driver di filtro crea un oggetto dispositivo e lo collega allo stack di dispositivi nella routine AddDevice . Se esiste più di un driver di filtro del bus ed è rilevante per questo dispositivo, ogni driver di filtro crea e collega il proprio oggetto dispositivo.
I driver di filtro facoltativi di livello inferiore creano DO di filtro per ogni dispositivo che filtrano.
Se per questo dispositivo esiste un driver di filtro facoltativo, il gestore PnP garantisce che tale driver venga caricato dopo il driver del bus e qualsiasi driver di filtro del bus. Il gestore PnP chiama la routine AddDevice del driver di filtro. Nella routine AddDevice il driver di filtro inferiore crea un filtro DO per il dispositivo e lo collega allo stack di dispositivi. Se esiste più di un driver di filtro di livello inferiore, ogni driver di questo tipo creerebbe e collegarà il proprio filtro DO.
Il driver di funzione crea un oggetto FDO per il dispositivo.
Il gestore PnP garantisce che il driver di funzione per il dispositivo venga caricato e chiami la routine AddDevice del driver di funzione. Il driver di funzione crea un oggetto FDO e lo collega allo stack di dispositivi.
Facoltativo, i driver di filtro di livello superiore creano un do filtro per ogni dispositivo che filtrano.
Se esistono driver di filtro di livello superiore facoltativi per il dispositivo, il gestore PnP garantisce che vengano caricati dopo il driver di funzione e chiamano le routine AddDevice . Ogni driver di filtro collega l'oggetto dispositivo allo stack di dispositivi.
In riepilogo, lo stack di dispositivi contiene un oggetto dispositivo per ogni driver coinvolto nella gestione dell'I/O in un determinato dispositivo. Il driver del bus padre ha un oggetto PDO, il driver di funzione ha un oggetto FDO e ogni driver di filtro facoltativo dispone di un filtro DO.
Si noti che tutti i dispositivi, i dispositivi adattatori/controller del bus e i dispositivi nonbus, dispongono di un oggetto PDO e un oggetto FDO nello stack di dispositivi. L'oggetto PDO per un adattatore/controller del bus viene creato dal driver del bus per il bus padre. Ad esempio, se un adattatore SCSI si collega a un bus PCI, il driver del bus PCI crea un oggetto PDO per la scheda SCSI.
Se un dispositivo viene usato in modalità non elaborata, non sono presenti driver di funzione o filtro (nessun oggetto DO o filtro). C'è solo un oggetto PDO per il driver del bus padre e zero o più DO del filtro del bus.
Per informazioni su quali routine driver sono responsabili della creazione e dell'associazione di oggetti dispositivo, vedere Creazione di un oggetto dispositivo .
Lo stack di dispositivi e alcune informazioni aggiuntive costituiscono il nodo devnode per un dispositivo. Il gestore PnP gestisce le informazioni nel devnode di un dispositivo, ad esempio se il dispositivo è stato avviato e quali driver, se presenti, hanno registrato per la notifica delle modifiche nel dispositivo. Il comando del debugger del kernel !devnode visualizza informazioni su un nodo devnode.