Compartir a través de


Completar una operación de E/S en una rutina de devolución de llamada de preoperación

Para completar una operación de E/S significa detener el procesamiento de la operación, asígnele un valor NTSTATUS final y devolverlo al administrador de filtros.

Cuando un controlador de minifiltro completa una operación de E/S, el administrador de filtros hace lo siguiente:

  • No envía la operación a los controladores de minifiltro por debajo del controlador minifiltro actual, a filtros heredados o al sistema de archivos.

  • Llama a las rutinas de devolución de llamada de postoperación de los controladores de minifiltro por encima del controlador minifiltro actual en la pila de instancias del controlador de minifiltro.

  • No llama a la rutina de devolución de llamada del controlador de minifiltro actual para la operación, si existe.

Una rutina de devolución de llamada de preoperación del controlador minifiltro completa una operación de E/S mediante los pasos siguientes:

  1. Establecer el campo IoStatus.Status de la estructura de datos de devolución de llamada en el valor NTSTATUS final de la operación.

  2. Devolver FLT_PREOP_COMPLETE.

Una rutina de devolución de llamada de preoperación que completa una operación de E/S no puede establecer un contexto de finalización no NULL (en el parámetro de salida CompletionContext ).

Un controlador de minifiltro también puede completar una operación en la rutina de trabajo para una operación de E/S previamente manuscrita mediante los pasos siguientes:

  1. Establecer el campo IoStatus.Status de la estructura de datos de devolución de llamada en el valor NTSTATUS final de la operación.

  2. Pasar FLT_PREOP_COMPLETE en el parámetro CallbackStatus cuando la rutina de trabajo llama a FltCompletePendedPreOperation.

Al completar una operación de E/S, un controlador de minifiltro debe establecer el campo IoStatus.Status de la estructura de datos de devolución de llamada en el valor NTSTATUS final de la operación, pero este valor NTSTATUS no puede ser STATUS_PENDING ni STATUS_FLT_DISALLOW_FAST_IO. Para una operación de limpieza o cierre, el campo debe ser STATUS_SUCCESS. Estas operaciones no se pueden completar con ningún otro valor NTSTATUS.

La finalización de una operación de E/S se conoce a menudo como correcta o con errores en la operación, en función del valor NTSTATUS:

  • Para realizar correctamente una operación de E/S significa completarla con un valor NTSTATUS correcto o informativo, como STATUS_SUCCESS.

  • Para producir un error en una operación de E/S significa completarla con un valor NTSTATUS de error o advertencia, como STATUS_INVALID_DEVICE_REQUEST o STATUS_BUFFER_OVERFLOW.

Los valores NTSTATUS se definen en ntstatus.h. Estos valores se dividen en cuatro categorías: correcto, informativo, advertencia y error. Para obtener más información sobre estos valores, vea Uso de valores NTSTATUS.