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 del 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 eventualmente eseguire 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 all'inizio dello stack di driver, un'applicazione in modalità utente.

Questo scopo principale della funzione di callback è quello di 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'origine.

Dopo che la funzione di callback ha ottenuto i buffer di una richiesta, può archiviare gli indirizzi del buffer o gli handle nella risorsa di 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 Framework-Based.

Al termine della pre-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 Intercettazione di una richiesta di I/O prima della coda e accesso ai buffer di dati nei driver 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 del driver durante situazioni di memoria insufficiente. Se tutti gli oggetti richiesta riservata del framework sono in uso, il framework posticipa l'elaborazione della richiesta di I/O fino a quando non è disponibile un oggetto richiesta riservata. In questo caso, il framework non può chiamare la funzione di callback EvtIoInCallerContext per la richiesta di I/O posticipata perché, quando diventa disponibile un oggetto richiesta riservata, 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 in 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 del driver può essere chiamata a 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

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Intestazione wdfdevice.h (include Wdf.h)
IRQL Vedere la sezione Osservazioni.

Vedi anche

EvtDeviceWdmIrpPreprocess