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:
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.
Llame a FltSetCallbackDataDirty.
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) |