Uso delle routine IoCompletion
I driver di livello superiore che monitorano in base a una specifica IRP il modo in cui i driver di livello inferiore hanno eseguito determinate richieste possono avere una o più routine IoCompletion . I driver di livello superiore che allocano IRP per inviare richieste a driver inferiori devono avere una routine IoCompletion .
È molto probabile che una routine DispatchRead o DispatchWrite di un driver di livello superiore o intermedio imposta 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 routine IoCompletion per ISP associati a operazioni di I/O sincrone. Ad esempio, una routine DispatchDeviceControl di un driver di livello superiore può allocare un IRP usando IoBuildDeviceIoControlRequest. In questo caso, la routine dispatch in genere non registra una routine IoCompletion , perché le richieste di controllo del dispositivo vengono in genere gestite in modo sincrono. Il driver può invece allocare e inizializzare un oggetto evento e la relativa routine DispatchDeviceControl può attendere l'inizializzazione di un evento quando viene inviato su IRP allocati dal driver. In genere, un driver di livello superiore non registra una routine IoCompletion per un IRP allocato con IoBuildSynchronousFsdRequest, per lo stesso motivo.
Questa sezione contiene i seguenti argomenti: