Partager via


Fonction FltCancelFileOpen (fltkernel.h)

Un pilote minifilter peut utiliser la routine FltCancelFileOpen pour fermer un fichier nouvellement ouvert ou créé.

Syntaxe

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

Paramètres

[in] Instance

Pointeur instance opaque pour l’appelant. Ce paramètre est obligatoire et ne peut pas être NULL.

[in] FileObject

Pointeur d’objet file pour le fichier. Ce paramètre est obligatoire et ne peut pas être NULL.

Valeur de retour

None

Remarques

Si un pilote minifilter détermine qu’une opération d’ouverture de fichier ou de création de fichier (IRP_MJ_CREATE) doit échouer une fois que le système de fichiers a déjà terminé l’opération avec une valeur NTSTATUS réussie telle que STATUS_SUCCESS, le pilote minifilter peut appeler FltCancelFileOpen à partir de sa routine de rappel post-création pour fermer le fichier.

Note Bien que STATUS_REPARSE soit une valeur NTSTATUS réussie, il n’est pas nécessaire d’appeler FltCancelFileOpen pour une opération de création qui s’est terminée avec STATUS_REPARSE, car cette valeur status indique que le fichier n’a pas été correctement ouvert.
 
Un appel réussi à FltCancelFileOpen a l’effet suivant : Pour les pilotes minifilter et les filtres hérités qui se trouvent au-dessus de l’appelant dans la pile instance du pilote minifilter, la demande de création semble avoir échoué. Pour ceux qui se trouvent sous l’appelant, le fichier semble avoir été ouvert (ou créé), puis fermé.

Notez que FltCancelFileOpen n’annule aucune modification apportée au fichier. Par exemple, FltCancelFileOpen ne supprime pas un fichier nouvellement créé ou ne restaure pas un fichier qui a été remplacé ou remplacé à son état précédent.

FltCancelFileOpen doit être appelé avant la création de handles pour le fichier. Les appelants peuvent case activée le membre Flags de la structure FILE_OBJECT vers laquelle pointe le paramètre FileObject. Si l’indicateur FO_HANDLE_CREATED est défini, cela signifie qu’un ou plusieurs handles ont été créés pour le fichier. Il n’est donc pas sûr d’appeler FltCancelFileOpen.

FltCancelFileOpen définit l’indicateur FO_FILE_OPEN_CANCELLED dans le membre Flags de l’objet file vers lequel FileObject pointe. Cet indicateur indique que l’opération de création a été annulée et qu’une demande de fermeture (IRP_MJ_CLOSE) sera émise pour cet objet de fichier.

Une fois l’opération de création annulée, elle ne peut pas être rééditée. Pour plus d’informations, consultez FltReissueSynchronousIo.

FltCancelFileOpen ne peut être appelé qu’à partir de la routine de rappel post-création d’un pilote minifilter. L’appel de FltCancelFileOpen à partir d’une routine de rappel postopératoire (PFLT_POST_OPERATION_CALLBACK) pour tout autre type d’opération d’E/S, ou son appel à partir d’une routine de rappel de préopération (PFLT_PRE_OPERATION_CALLBACK), est une erreur de programmation.

Les appelants de FltCancelFileOpen doivent être en cours d’exécution sur irQL PASSIVE_LEVEL. Toutefois, il est sûr pour les pilotes minifilter d’appeler cette routine à partir d’une routine de rappel post-création, car les routines de rappel post-création sont garanties d’être appelées au PASSIVE_LEVEL IRQL, dans le contexte du thread à l’origine de la demande IRP_MJ_CREATE.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête fltkernel.h (inclure Fltkernel.h)
Bibliothèque FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (voir la section Remarques)

Voir aussi

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS pour IRP_MJ_CREATE

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK