Stack di driver

La maggior parte delle richieste inviate ai driver di dispositivo viene inserita in pacchetti di richieste di I/O (IRP). Ogni dispositivo è rappresentato da un nodo del dispositivo e ogni nodo del dispositivo ha uno stack di dispositivi. Per altre informazioni, vedere Nodi del dispositivo e stack di dispositivi. Per inviare una richiesta di lettura, scrittura o controllo a un dispositivo, gestione I/O individua il nodo del dispositivo per il dispositivo e quindi invia un IRP allo stack di dispositivi di tale nodo. A volte più di uno stack di dispositivi è coinvolto nell'elaborazione di una richiesta di I/O. Indipendentemente dal numero di stack di dispositivi coinvolti, la sequenza complessiva di driver che partecipano a una richiesta di I/O viene chiamata stack di driver per la richiesta. Viene usato anche il termine stack di driver per fare riferimento al set di driver a più livelli per una particolare tecnologia.

Richieste di I/O elaborate da diversi stack di dispositivi

In alcuni casi, più stack di dispositivi è coinvolto nell'elaborazione di un IRP. Il diagramma seguente illustra un caso in cui quattro stack di dispositivi sono coinvolti nell'elaborazione di un singolo IRP.

diagramma di quattro nodi del dispositivo, ognuno con uno stack di dispositivi.

Ecco come viene elaborato il provider di identità in ogni fase numerata nel diagramma:

  1. L'IRP viene creato da Disk.sys, ovvero il driver di funzione nello stack di dispositivi per il nodo Dispositivo di archiviazione USB. Disk.sys passa l'IRP verso il basso lo stack di dispositivi a Usbstor.sys.

  2. Si noti che Usbstor.sys è il driver PDO per il nodo Dispositivo di archiviazione USB personale e il driver FDO per il nodo Dispositivo di archiviazione di massa USB. A questo punto, non è importante decidere se l'IRP è di proprietà della coppia (PDO, Usbstor.sys) o della coppia (FDO, Usbstor.sys). L'IRP è di proprietà del driver, Usbstor.sys e il driver ha accesso sia al PDO che al FDO.

  3. Quando Usbstor.sys ha completato l'elaborazione dell'IRP, passa l'IRP a Usbhub.sys. Usbhub.sys è il driver PDO per il nodo Dispositivo di archiviazione di massa USB e il driver FDO per il nodo Hub radice USB. Non è importante decidere se l'IRP è di proprietà della coppia (PDO, Usbhub.sys) o della coppia (FDO, Usbhub.sys). L'IRP è di proprietà del driver, Usbhub.sys e il driver ha accesso sia al PDO che al FDO.

  4. Quando Usbhub.sys ha completato l'elaborazione dell'IRP, passa l'IRP alla coppia (Usbuhci.sys, Usbport.sys).

    Usbuhci.sys è un driver miniport e Usbport.sys è un driver di porta. La coppia (miniport, porta) svolge il ruolo di un singolo driver. In questo caso, sia il driver miniport che il driver di porta vengono scritti da Microsoft. La coppia (Usbuhci.sys, Usbport.sys) è il driver PDO per il nodo hub radice USB e la coppia (Usbuhci.sys, Usbport.sys) è anche il driver FDO per il nodo Controller host USB. La coppia (Usbuhci.sys, Usbport.sys) esegue la comunicazione effettiva con l'hardware del controller host, che a sua volta comunica con il dispositivo di archiviazione USB fisico.

Stack di driver per una richiesta di I/O

Si consideri la sequenza di quattro driver che hanno partecipato alla richiesta di I/O illustrata nel diagramma precedente. È possibile ottenere un'altra visualizzazione della sequenza concentrandosi sui driver anziché sui nodi del dispositivo e sui singoli stack di dispositivi. Il diagramma seguente mostra i driver in sequenza dall'alto verso il basso. Si noti che Disk.sys è associato a un oggetto dispositivo, ma ognuno degli altri tre driver è associato a due oggetti dispositivo.

diagramma di uno stack di driver, che mostra il driver superiore associato solo a un fdo e gli altri tre driver associati a un pdo e a un fdo.

La sequenza di driver che partecipano a una richiesta di I/O viene chiamata stack di driver per la richiesta di I/O. Per illustrare uno stack di driver per una richiesta di I/O, i driver vengono tracciati dall'alto verso il basso nell'ordine in cui partecipano alla richiesta.

Si noti che lo stack di driver per una richiesta di I/O è molto diverso dallo stack di dispositivi per un nodo del dispositivo. Si noti anche che lo stack di driver per una richiesta di I/O non rimane necessariamente in un ramo dell'albero dei dispositivi.

Stack di driver tecnologici

Si consideri lo stack di driver per la richiesta di I/O illustrata nel diagramma precedente. Se si assegna a ognuno dei driver un nome descrittivo e si apportano alcune piccole modifiche al diagramma, è disponibile un diagramma a blocchi simile a molti di quelli visualizzati nella documentazione di Windows Driver Kit (WDK).

diagramma di uno stack di driver che mostra nomi descrittivi per i driver: driver di classe del disco in alto seguito dal driver della porta di archiviazione USB, quindi driver dell'hub USB e driver (porta USB 2 miniport, porta USB).

Nel diagramma lo stack di driver è suddiviso in tre sezioni. Possiamo pensare a ogni sezione come appartenente a una particolare tecnologia o a un determinato componente o parte del sistema operativo. Ad esempio, si potrebbe dire che la prima sezione nella parte superiore dello stack di driver appartiene a Volume Manager, la seconda sezione appartiene al componente di archiviazione del sistema operativo e la terza sezione appartiene alla parte USB principale del sistema operativo.

Prendere in considerazione i driver nella terza sezione. Questi driver sono un subset di un set più ampio di driver USB di base che Microsoft fornisce per la gestione di vari tipi di richieste USB e hardware USB. Il diagramma seguente mostra l'aspetto dell'intero diagramma a blocchi di base USB.

diagramma che mostra lo stack di driver tecnologici per il possibile blocco usb core .

Un diagramma a blocchi che mostra tutti i driver per una particolare tecnologia o un determinato componente o parte del sistema operativo è detto stack di driver tecnologici. In genere, agli stack di driver tecnologici vengono assegnati nomi come lo stack di driver USB Core, lo stack di archiviazione, lo stack di driver 1394 e lo stack di driver audio.

Nota: il diagramma a blocchi di base USB in questo articolo illustra uno dei diversi modi possibili per illustrare gli stack di driver tecnologici per USB 1.0 e 2.0. Per i diagrammi ufficiali degli stack di driver USB 1.0, 2.0 e 3.0, vedi Architettura dello stack di driver USB.

Nodi del dispositivo e stack di dispositivi

Minidriver e coppie di driver

Concetti per tutti gli sviluppatori di driver