Creazione di oggetti richiesta framework

Gli oggetti richiesta framework rappresentano le richieste di I/O inviate dal gestore I/O a un driver. I driver basati su framework elaborano ogni richiesta di I/O chiamando i metodi dell'oggetto della richiesta framework.

Ogni richiesta di I/O contiene un pacchetto di richiesta I/O WDM (struttura IRP), ma i driver basati su framework in genere non devono accedere alla struttura IRP .

La maggior parte degli oggetti richiesta framework viene creata dal framework, ma il driver può anche creare oggetti di richiesta.

Richieste di oggetti creati da Framework

Quando un driver basato su framework riceve un pacchetto di richiesta I/O (IRP) dalla gestione I/O, il framework intercetta l'IRP e crea un oggetto richiesta framework. Il framework inserisce l'oggetto request in una coda di I/O e, se il driver ha registrato gestori di richieste per la coda, chiama il gestore appropriato.

Il diagramma seguente illustra i passaggi che si verificano quando il framework crea un oggetto request per un'operazione di lettura.

Diagramma che illustra i passaggi per creare un oggetto request per un'operazione di lettura in un driver basato su framework.

I passaggi seguenti corrispondono ai numeri nel diagramma precedente:

  1. Un'applicazione in modalità utente legge un file chiamando la funzione Microsoft Win32 ReadFile .

  2. La funzione ReadFile chiama gestione I/O, che viene eseguita in modalità kernel.

  3. Il gestore I/O alloca una struttura IRP e archivia un codice di funzione IRP_MJ_READ nella struttura.

  4. Il gestore I/O chiama la routine del driver Standard DispatchRead per driver x, passando un puntatore alla struttura IRP. Poiché driver x è un driver basato su framework, il framework fornisce la routine DispatchRead del driver.

  5. Il framework crea un oggetto request che rappresenta la struttura IRP. Il framework aggiunge l'oggetto request a uno degli oggetti code del driver.

  6. Il framework chiama il gestore della richiesta EvtIoRead del driver, passando un handle dell'oggetto coda e un handle dell'oggetto richiesta.

Richieste di oggetti creati da un driver

I driver basati su framework possono anche creare oggetti di richiesta. Ad esempio, un driver può creare oggetti richiesta se riceve una richiesta di lettura o scrittura per una quantità di dati maggiore rispetto alle destinazioni di I/O del driver può gestire contemporaneamente. In tale situazione, il driver può dividere i dati in diverse richieste più piccole e usare oggetti richiesta aggiuntivi per inviare queste richieste più piccole a una o più destinazioni di I/O.

Per creare un oggetto request, il driver deve chiamare WdfRequestCreate seguito da metodi dell'oggetto framework che inizializzano la richiesta, ad esempio WdfUsbTargetPipeFormatRequestForRead.

Se un driver riceve ISP WDM in una routine di invio WDM e quindi li inoltra usando il framework, il driver può chiamare WdfRequestCreateFromIrp.