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 minifilter 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 obligatorio 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 anteriormente. Este parámetro es obligatorio y no se puede establecer en NULL.

Valor devuelto

None

Observaciones

Un controlador de minifiltro llama a FltReissueSynchronousIo desde una rutina de 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 distintos parámetros 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 a las rutinas FltAllocateCallbackData y 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 FltReuseCallbackData y FltPerformSynchronousIo en su lugar.

El autor de la llamada puede modificar el contenido del bloque de parámetros de E/S de la estructura de devolución de llamada (FLT_CALLBACK_DATA) 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 asociadas 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 FltIsOperationSynchronous 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. Las operaciones rápidas de E/S y las operaciones de devolución de llamada del filtro de sistema de archivos (FSFilter) no se pueden volver a emitir. 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) cancelada. 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 de FO_FILE_OPEN_CANCELLED, esto significa que se ha cancelado la operación de creación y se emitirá una operación de cierre (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 Value
Cliente mínimo compatible Paquete acumulativo de actualizaciones de Windows 2000 1 para SP4; Windows XP SP2
Servidor mínimo compatible Windows Server 2003 SP1
Plataforma de destino Universal
Encabezado fltkernel.h (incluya FltKernel.h)
Library FltMgr.lib
Archivo DLL 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