Uso de rutinas de IoCompletion

Los controladores de nivel superior que supervisan de forma específica de IRP cómo los controladores de nivel inferior llevan a cabo determinadas solicitudes pueden tener una o varias rutinas de IoCompletion . Los controladores de nivel superior que asignan IRP para enviar solicitudes a controladores inferiores deben tener una rutina de IoCompletion .

Es más probable que una rutina DispatchRead o DispatchWrite del controlador de nivel superior o intermedio establezca una rutina de IoCompletion para un IRP, ya que los controladores de nivel inferior deben controlar las solicitudes de transferencia de forma asincrónica.

El controlador de nivel más bajo de una pila de controladores no puede registrar rutinas de IoCompletion .

Por lo general, los controladores no registran rutinas de IoCompletion para IRP asociadas a operaciones de E/S sincrónicas. Por ejemplo, una rutina DispatchDeviceControl de un controlador de nivel superior puede asignar un IRP mediante IoBuildDeviceIoControlRequest. En este caso, la rutina de distribución normalmente no registra una rutina de IoCompletion , ya que las solicitudes de control de dispositivos suelen controlarse sincrónicamente. En su lugar, el controlador puede asignar e inicializar un objeto de evento, y su rutina DispatchDeviceControl puede esperar a que se inicialice un evento cuando envía irP asignados por el controlador. Normalmente, un controlador de nivel superior no registra una rutina de IoCompletion para un IRP asignado con IoBuildSynchronousFsdRequest, por el mismo motivo.

Esta sección contiene los siguientes temas:

Registro de una rutina de IoCompletion

Implementación de una rutina de IoCompletion