Partilhar via


Usando rotinas IoCompletion

Drivers de nível superior que monitoram de forma específica do IRP como os drivers de nível inferior realizaram solicitações específicas podem ter uma ou mais rotinas de IoCompletion . Os drivers de nível superior que alocam IRPs para enviar solicitações para drivers inferiores devem ter uma rotina IoCompletion .

Uma rotina DispatchRead ou DispatchWrite de driver intermediário ou de alto nível provavelmente definirá uma rotina IoCompletion para um IRP, pois os drivers de nível inferior devem lidar com solicitações de transferência de forma assíncrona.

O driver de nível mais baixo em uma pilha de driver não pode registrar rotinas IoCompletion .

Os drivers geralmente não registram rotinas de IoCompletion para IRPs associadas a operações de E/S síncronas. Por exemplo, a rotina DispatchDeviceControl de um driver de nível superior pode alocar um IRP usando IoBuildDeviceIoControlRequest. Nesse caso, a rotina de expedição normalmente não registra uma rotina IoCompletion , pois as solicitações de controle de dispositivo geralmente são tratadas de forma síncrona. Em vez disso, o driver pode alocar e inicializar um objeto de evento, e sua rotina DispatchDeviceControl pode esperar que um evento seja inicializado quando ele envia IRPs alocados pelo driver. Normalmente, um driver de nível superior não registra uma rotina IoCompletion para um IRP alocado com IoBuildSynchronousFsdRequest, pelo mesmo motivo.

Esta seção contém os seguintes tópicos:

Registrando uma rotina IoCompletion

Implementando uma rotina IoCompletion