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.