Condividi tramite


Pacchetti di richieste di I/O

La maggior parte delle richieste inviate ai driver di dispositivo viene inserita in pacchetti di richieste di I/O (IRP). Un componente del sistema operativo o un driver invia un IRP a un driver chiamando IoCallDriver, che ha due parametri: un puntatore a un DEVICE_OBJECT e un puntatore a un IRP. Il DEVICE_OBJECT ha un puntatore a un DRIVER_OBJECT associato. Quando un componente chiama IoCallDriver, diciamo che il componente invia l'IRP all'oggetto dispositivo o invia l'IRP al driver associato all'oggetto dispositivo. A volte si usa la frase che passa l'IRP o inoltra l'IRP anziché inviare l'IRP.

In genere, un IRP viene elaborato da diversi driver disposti in uno stack. Ogni driver nello stack è associato a un oggetto dispositivo. Per altre informazioni, vedere Nodi del dispositivo e stack di dispositivi. Quando un IRP viene elaborato da uno stack di dispositivi, l'IRP viene in genere inviato prima all'oggetto dispositivo superiore nello stack di dispositivi. Ad esempio, se uno stack di dispositivi viene elaborato dallo stack di dispositivi illustrato in questo diagramma, l'IRP verrà inviato prima all'oggetto dispositivo filtro (Filter DO) nella parte superiore dello stack di dispositivi.

diagramma di un nodo del dispositivo e del relativo stack di dispositivi.

Passaggio di un IRP verso il basso dello stack di dispositivi

Si supponga che il gestore di I/O invii un IRP a Filter DO nel diagramma. Il driver associato a Filter DO, AfterThought.sys, elabora l'IRP e quindi lo passa all'oggetto dispositivo funzionale (FDO), ovvero l'oggetto dispositivo inferiore successivo nello stack di dispositivi. Quando un driver passa un IRP all'oggetto dispositivo inferiore successivo nello stack di dispositivi, diciamo che il driver passa l'IRP nello stack di dispositivi.

Alcuni runtime di integrazione vengono passati fino in fondo allo stack di dispositivi all'oggetto dispositivo fisico (PDO). Gli altri IRP non raggiungono mai il PDO perché vengono completati da uno dei driver sopra il PDO.

I runtime di integrazione sono autonomi

La struttura IRP è autonoma nel senso che contiene tutte le informazioni che un driver deve gestire una richiesta di I/O. Alcune parti della struttura IRP contengono informazioni comuni a tutti i driver partecipanti nello stack. Altre parti dell'IRP contengono informazioni specifiche di un determinato driver nello stack.