Compartir a través de


Función FltCancelFileOpen (fltkernel.h)

Un controlador de minifiltro puede usar la rutina 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 obligatorio y no puede ser NULL.

[in] FileObject

Puntero de objeto de archivo para el archivo. Este parámetro es obligatorio y no puede ser NULL.

Valor devuelto

None

Observaciones

Si un controlador de minifiltro determina que una operación de creación de archivos 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.

Nota Aunque STATUS_REPARSE es un valor NTSTATUS correcto, no es necesario llamar a FltCancelFileOpen para una operación de creación que se completó con STATUS_REPARSE, porque este valor de estado indica que el archivo no se abrió correctamente.
 
Una llamada correcta a FltCancelFileOpen tiene el siguiente efecto: Para minifiltrar controladores y filtros heredados que están por encima del autor de la llamada en la pila de instancias del controlador de minifiltro, parece que se ha producido un error en la solicitud de creación. A los que están debajo del autor de la llamada, parece que el archivo se ha abierto (o creado) y, a continuación, se ha cerrado.

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.

Se debe llamar a FltCancelFileOpen antes de que se creen 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 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 de cierre (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 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 las rutinas de devolución de llamada posteriores a la creación se llamen en irQL PASSIVE_LEVEL, en el contexto del subproceso que originó la solicitud de IRP_MJ_CREATE.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Fltkernel.h)
Library FltMgr.lib
Archivo DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (consulte la sección Comentarios)

Consulte también

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS para IRP_MJ_CREATE

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK