EVT_WDF_IO_IN_CALLER_CONTEXT funzione di callback (wdfdevice.h)

[Si applica solo a KMDF]

La funzione di callback dell'evento EvtIoInCallerContext di un driver pre-elabora una richiesta di I/O prima che il framework lo inserisca in una coda di I/O.

Sintassi

EVT_WDF_IO_IN_CALLER_CONTEXT EvtWdfIoInCallerContext;

void EvtWdfIoInCallerContext(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request
)
{...}

Parametri

[in] Device

Handle per un oggetto dispositivo framework.

[in] Request

Handle per un oggetto richiesta framework.

Valore restituito

nessuno

Osservazioni

Il framework chiama la funzione di callback EvtIoInCallerContext di un driver in modo che il driver possa esaminare ogni richiesta di I/O ed eseguire eventualmente l'elaborazione preliminare sulla richiesta, prima che il framework lo inserisca in una coda di I/O. Per registrare una funzione di callback EvtIoInCallerContext per un dispositivo, il driver chiama WdfDeviceInitSetIoInCallerContextCallback.

Se un driver registra una funzione di callback EvtIoInCallerContext per un dispositivo, il framework chiama la funzione di callback ogni volta che riceve una richiesta di I/O per il dispositivo. La funzione di callback viene chiamata nel contesto del thread del processo che ha inviato la richiesta di I/O al driver. Questo processo è il driver di livello successivo o, se il driver si trova nella parte superiore dello stack di driver, un'applicazione in modalità utente.

Questo scopo principale della funzione di callback consiste nell'abilitare i driver basati su framework per supportare il metodo di accesso al buffer chiamato non memorizzato nel buffer né nell'I/O diretto. Per questo metodo di accesso al buffer, il driver deve accedere ai buffer ricevuti nel contesto del processo dell'autore.

Dopo aver ottenuto i buffer di una richiesta, la funzione di callback può archiviare gli indirizzi del buffer o gli handle nell'archiviazione del contesto dell'oggetto richiesta. Il driver imposta le dimensioni dell'area di archiviazione del contesto dell'oggetto richiesta chiamando WdfDeviceInitSetRequestAttributes.

Poiché la richiesta non appartiene ancora a una coda di I/O, il framework non blocca o sincronizza la richiesta. Il driver è responsabile di qualsiasi sincronizzazione che potrebbe essere necessaria. Per altre informazioni sulla sincronizzazione, vedere Tecniche di sincronizzazione per i driver di Framework-Based.

Al termine dell'elaborazione della richiesta, la funzione di callback deve accodarla chiamando WdfDeviceEnqueueRequest o completandola chiamando WdfRequestComplete (se viene rilevato un errore).

Per altre informazioni sulla funzione di callback EvtIoInCallerContext , vedere Intercettare una richiesta di I/O prima di eseguire la coda e l'accesso ai buffer di dati nei driver di Framework-Based.

Se un driver ha configurato una coda di I/O per supportare lo stato di avanzamento in avanti garantito, il framework potrebbe non chiamare la funzione di callback EvtIoInCallerContext durante situazioni di memoria ridotta. Se tutti gli oggetti di richiesta riservati del framework sono in uso, il framework rinvia l'elaborazione della richiesta di I/O fino a quando non è disponibile un oggetto richiesta riservato. In questa situazione, il framework non può chiamare la funzione di callback EvtIoInCallerContext per la richiesta di I/O posticipata perché, quando un oggetto richiesta riservata diventa disponibile, il framework non sarà più in esecuzione nel contesto del thread del processo che ha inviato la richiesta di I/O al driver.

La funzione di callback EvtIoInCallerContext viene chiamata all'irQL del thread chiamante. Se il thread chiamante proviene da un'applicazione in modalità utente, la funzione di callback viene chiamata in IRQL = PASSIVE_LEVEL. Se il thread chiamante proviene da un driver in modalità kernel di livello superiore, la funzione di callback EvtIoInCallerContext può essere chiamata in IRQL = DISPATCH_LEVEL se sia la funzione di callback che il driver di livello superiore sono progettati per passare la richiesta a IRQL <<= DISPATCH_LEVEL.

Requisiti

   
Piattaforma di destinazione Universale
Versione KMDF minima 1,0
Intestazione wdfdevice.h (includere Wdf.h)
IRQL Vedere La sezione Osservazioni.

Vedi anche

EvtDeviceWdmIrpPreprocess