Cuándo completar un IRP
Un controlador debe iniciar la finalización de IRP cuando se cumpla cualquiera de las condiciones siguientes:
El controlador determina que el procesamiento de IRP no puede progresar debido a parámetros no válidos u otras condiciones.
El controlador puede controlar la operación de E/S solicitada sin pasar el IRP por la pila del controlador y la operación ha finalizado.
El IRP se está cancelando. (Consulte Cancelación de IRP).
Si no se cumplen estas condiciones, la rutina de envío de un controlador debe pasar el IRP al controlador inferior siguiente o debe controlar el procesamiento de la solicitud de E/S. Si se cumple una de las condiciones, el controlador debe llamar a IoCompleteRequest.
Si un controlador completa una solicitud porque el procesamiento no puede avanzar o si completa una solicitud controlando la operación solicitada sin acceder realmente al dispositivo, normalmente llama a IoCompleteRequest desde una de sus rutinas de envío. Para obtener más información, consulte Finalización de IRP en rutinas de distribución.
Si un controlador debe acceder a un dispositivo para satisfacer la solicitud, normalmente llama a IoCompleteRequest desde una rutina DpcForIsr . Estas rutinas se describen ampliamente en Interrupciones de mantenimiento.