Función FltCancelFileOpen (fltkernel.h)
Un controlador de minifiltro puede usar la rutina de FltCancelFileOpen para cerrar un archivo recién abierto o creado.
Sintaxis
VOID FLTAPI FltCancelFileOpen(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject
);
Parámetros
[in] Instance
Puntero de instancia opaco para el autor de la llamada. Este parámetro es necesario y no se puede null.
[in] FileObject
Puntero de objeto de archivo para el archivo. Este parámetro es necesario y no se puede null.
Valor devuelto
Ninguno
Observaciones
Si un controlador de minifiltro determina que una operación de archivo abierta o de creación de archivos (IRP_MJ_CREATE) debe producir un error después de que el sistema de archivos ya haya completado la operación con un valor NTSTATUS correcto, como STATUS_SUCCESS, el controlador de minifiltro puede llamar a FltCancelFileOpen desde su rutina de devolución de llamada posterior a la creación para cerrar el archivo.
Tenga en cuenta que FltCancelFileOpen no deshace ninguna modificación en el archivo. Por ejemplo, FltCancelFileOpen no elimina un archivo recién creado ni restaura un archivo sobrescrito o reemplazado a su estado anterior.
fltCancelFileOpen debe llamarse antes de crear los identificadores para el archivo. Los autores de llamadas pueden comprobar el miembro Flags de la estructura FILE_OBJECT a la que apunta el parámetro FileObject. Si se establece la marca FO_HANDLE_CREATED, esto significa que se han creado uno o varios identificadores para el archivo, por lo que no es seguro llamar a FltCancelFileOpen.
FltCancelFileOpen establece la marca de FO_FILE_OPEN_CANCELLED en el miembro Flags del objeto de archivo al que apunta FileObject. Esta marca indica que se ha cancelado la operación de creación y se emitirá una solicitud close (IRP_MJ_CLOSE) para este objeto de archivo.
Una vez cancelada la operación de creación, no se puede volver a emitir. Para obtener más información, vea FltReissueSynchronousIo.
FltCancelFileOpen solo se puede llamar desde una rutina de devolución de llamada posterior a la creación de un controlador de minifiltro. Llamar a FltCancelFileOpen desde una rutina de devolución de llamada postoperación (PFLT_POST_OPERATION_CALLBACK) para cualquier otro tipo de operación de E/S o llamarla desde una rutina de devolución de llamada de preoperación (PFLT_PRE_OPERATION_CALLBACK) es un error de programación.
Los autores de llamadas de FltCancelFileOpen deben ejecutarse en irQL PASSIVE_LEVEL. Sin embargo, es seguro que los controladores de minifiltro llamen a esta rutina desde una rutina de devolución de llamada posterior a la creación, ya que se garantiza que se llame a las rutinas de devolución de llamada posteriores a la creación en IRQL PASSIVE_LEVEL, en el contexto del subproceso que originó la solicitud de IRP_MJ_CREATE.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | fltkernel.h (incluya Fltkernel.h) |
biblioteca de | FltMgr.lib |
DLL de | Fltmgr.sys |
irQL | PASSIVE_LEVEL (consulte la sección Comentarios) |