Compartir a través de


Pendiente de una operación de E/S en una rutina de devolución de llamada posterior a la operación

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

  1. Llamar a FltAllocateDeferredIoWorkItem para asignar un elemento de trabajo para la operación de E/S.

  2. Llamar a FltQueueDeferredIoWorkItem para publicar la operación de E/S en una cola de trabajo del sistema.

  3. Devolver FLT_POSTOP_MORE_PROCESSING_REQUIRED.

Tenga en cuenta que la llamada a FltQueueDeferredIoWorkItem producirá un error si se cumple alguna de las condiciones siguientes:

  • La operación no es una operación de E/S basada en IRP.

  • La operación es una operación de E/S de paginación.

  • El campo TopLevelIrp del subproceso actual no es NULL. (Para obtener más información sobre cómo encontrar el valor de este campo, consulte IoGetTopLevelIrp).

  • La instancia de destino de la operación de E/S se está descomponiéndose. (El administrador de filtros indica esta situación estableciendo la marca FLTFL_POST_OPERATION_DRAINING en el parámetro de entrada Flags en la rutina de devolución de llamada de postoperación).

Los controladores de minifiltro deben estar preparados para controlar este error. Si el controlador de minifiltro no puede controlar estos errores, debe considerar la posibilidad de usar la técnica que se describe en Devolver FLT_PREOP_SYNCHRONIZE en lugar de pendiente de la operación de E/S.

Después de que la rutina de devolución de llamada de postoperación del controlador minifiltro devuelva FLT_POSTOP_MORE_PROCESSING_REQUIRED, el administrador de filtros no realizará ningún procesamiento de finalización adicional para la operación de E/S hasta que la rutina de trabajo del controlador minifiltro llame a FltCompletePendedPostOperation para devolver el control de la operación al administrador de filtros. El administrador de filtros no realizará ningún procesamiento adicional en esta situación aunque la rutina de trabajo establezca un valor NTSTATUS de error en el campo IoStatus.Status de la estructura de datos de devolución de llamada para la operación.

La rutina de trabajo que quita la cola y realiza el procesamiento de finalización de la operación de E/S debe llamar a FltCompletePendedPostOperation para devolver el control de la operación al administrador de filtros.