Compartir a través de


Función FltReissueSynchronousIo (fltkernel.h)

FltReissueSynchronousIo inicia una nueva operación de E/S sincrónica que usa los parámetros de una operación de E/S sincronizada previamente.

Sintaxis

VOID FLTAPI FltReissueSynchronousIo(
  [in] PFLT_INSTANCE      InitiatingInstance,
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parámetros

[in] InitiatingInstance

Puntero de instancia opaco a la instancia del controlador de minifiltro que vuelve a emitir la operación de E/S. Debe ser la misma instancia que inició la operación de E/S anterior. Este parámetro es necesario y no se puede establecer en NULL.

[in] CallbackData

Puntero a la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) de una operación de E/S sincronizada previamente. Este parámetro es necesario y no se puede establecer en NULL.

Valor devuelto

Ninguno

Observaciones

Un controlador de minifiltro llama a rutina fltReissueSynchronousIo desde una devolución de llamada postoperación (PFLT_POST_OPERATION_CALLBACK) para volver a emitir una solicitud de E/S sincronizada. Normalmente llama a FltReissueSynchronousIo desde una rutina de devolución de llamada de postoperación para volver a emitir una operación con errores con parámetros diferentes o para controlar un rebote de reanálisis. Sin embargo, también puede llamar a FltReissueSynchronousIo para volver a emitir E/S que el controlador de minifiltro generó a través de llamadas al FltAllocateCallbackData y rutinas fltPerformSynchronousIo. En esta situación, no importa si llama a FltReissueSynchronousIo en una rutina de devolución de llamada de postoperación o fuera del contexto de una rutina de devolución de llamada de operación. Para las llamadas fuera del contexto de una rutina de devolución de llamada de postoperación, considere la posibilidad de usar las rutinas deFltReuseCallbackData y FltPerformSynchronousIo en su lugar.

El autor de la llamada puede modificar el contenido de los datos de devolución de llamada (FLT_CALLBACK_DATA) bloque de parámetros de E/S de la estructura antes de volver a emitir la solicitud de E/S. Si lo hace, debe llamar a FltSetCallbackDataDirty antes de llamar a FltReissueSynchronousIo.

Por ejemplo, si un controlador de minifiltro usa puntos de reanálisis y se llama a su rutina de devolución de llamada posterior a la creación para una operación de creación que devolvió STATUS_REPARSE, el controlador de minifiltro puede volver a emitir la operación de creación para sus propios puntos de reanálisis. En este caso, el controlador de minifiltro completará los pasos siguientes:

  1. Establezca la marca FILE_OPEN_REPARSE_POINT en el bloque de parámetros de E/S de la estructura de datos de devolución de llamada.

  2. Llame a FltSetCallbackDataDirty.

  3. Llame a FltReissueSynchronousIo para volver a emitir la solicitud de creación.

El Administrador de filtros envía la solicitud de E/S reemitida solo a las instancias del controlador de minifiltro que se adjuntan debajo de la instancia de inicio (especificada en el parámetro InitiatingInstance) y al sistema de archivos. Las instancias de controlador de minifiltro adjuntas encima de la instancia de inicio no reciben la solicitud de E/S reemitida.

Solo se pueden volver a emitir las operaciones de E/S sincronizadas. Para proporcionar al controlador la capacidad de volver a emitir, llamando a FltReissueSynchronousIo en la rutina de devolución de llamada de postoperación, un controlador de minifiltro debe devolver específicamente FLT_PREOP_SYNCHRONIZE en la rutina de devolución de llamada de preoperación.

Nota

El controlador de minifiltro no llama a la rutina deFltIsOperationSynchronous para determinar si la rutina de devolución de llamada de preoperación para esta operación devolvió FLT_PREOP_SYNCHRONIZE. El controlador de minifiltro llama a fltIsOperationSynchronous para determinar si la propia operación es sincrónica desde la perspectiva del administrador de E/S.

Solo se pueden volver a emitir las operaciones de E/S basadas en IRP. No se pueden volver a emitir las operaciones de devolución de llamada de operaciones de E/S rápidas y de filtro de sistema de archivos (FSFilter). Para determinar si una operación de E/S está basada en IRP, use la macro FLT_IS_IRP_OPERATION.

No se puede volver a emitir una operación de creación (IRP_MJ_CREATE) que se ha cancelado. Antes de llamar a FltReissueSynchronousIo para una operación de creación, los autores de llamadas deben comprobar el miembro Flags del objeto de archivo para la operación de creación. Si se establece la marca FO_FILE_OPEN_CANCELLED, esto significa que se ha cancelado la operación de creación y se emitirá una operación close (IRP_MJ_CLOSE) para este objeto de archivo. Si se llama a FltReissueSynchronousIo para una operación de creación que se ha cancelado, el Administrador de filtros produce un error en la solicitud de E/S reemitida con STATUS_CANCELLED.

Nota

Cuando los controladores de minifiltro vuelven a emitir la creación en la devolución de llamada posterior a la creación, no tienen que liberar y establecer el búfer asociado a su punto de reanálisis (campo TagData en CallbackData) en NULL. En su lugar, el Administrador de filtros libera y establece el búfer en NULL para ellos.

Requisitos

Requisito Valor
cliente mínimo admitido Paquete acumulativo de actualizaciones de Windows 2000 1 para SP4; Windows XP SP2
servidor mínimo admitido Windows Server 2003 SP1
de la plataforma de destino de Universal
encabezado de fltkernel.h (incluya FltKernel.h)
biblioteca de FltMgr.lib
DLL de Fltmgr.sys
irQL <= APC_LEVEL (la E/S sin paginación solo se puede volver a emitir en PASSIVE_LEVEL)

Consulte también

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS para IRP_MJ_CREATE

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK