Uso di routine IoCompletion

Driver di livello superiore che monitorano in modo specifico i driver di livello inferiore possono avere una o più routine IoCompletion . I driver di livello superiore che allocano i provider di integrazione per inviare richieste a driver inferiori devono avere una routine IoCompletion .

Una routine DispatchRead o DispatchWrite di livello più alto o intermedio è più probabile impostare una routine IoCompletion per un'IRP , perché i driver di livello inferiore devono gestire le richieste di trasferimento in modo asincrono.

Il driver di livello più basso in uno stack di driver non può registrare routine IoCompletion .

I driver in genere non registrano le routine IoCompletion per gli indirizzi IP associati alle operazioni di I/O sincrone. Ad esempio, una routine DispatchDeviceControl di livello superiore può allocare un'IRP usando IoBuildDeviceIoControlRequest. In questo caso, la routine di invio in genere non registra una routine IoCompletion , perché le richieste di controllo del dispositivo vengono generalmente gestite in modo sincrono. Il driver può invece allocare e inizializzare un oggetto evento e la routine DispatchDeviceControl può attendere l'inizializzazione di un evento quando invia i irP allocati dal driver. In genere, un driver di livello superiore non registra una routine IoCompletion per un'IRP allocata con IoBuildSynchronousFsdRequest, per lo stesso motivo.

Questa sezione contiene i seguenti argomenti:

Registrazione di una routine IoCompletion

Implementazione di una routine IoCompletion