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:
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 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) |