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