Partager via


FltCancelFileOpen, fonction (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 d’instance opaque pour l’appelant. Ce paramètre est obligatoire et ne peut pas être NULL.

[in] FileObject

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

Valeur de retour

Aucun

Remarques

Si un pilote minifilter détermine qu’une opération de création de fichiers ou de création de fichiers (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.

Remarque 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 terminée avec STATUS_REPARSE, car cette valeur d’état indique que le fichier n’a pas été ouvert avec succès.
 
Un appel réussi à FltCancelFileOpen a l’effet suivant : Pour les pilotes minifilter et les filtres hérités situés au-dessus de l’appelant dans la pile d’instances de 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 du 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ée avant la création de handles pour le fichier. Les appelants peuvent vérifier les indicateurs membre 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 de FO_FILE_OPEN_CANCELLED dans le membre Flags de l’objet de fichier 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 d’une routine de rappel post-création d’un pilote minifilter. L’appel de FltCancelFileOpen à partir d’une routine de rappel de postopération (PFLT_POST_OPERATION_CALLBACK) pour tout autre type d’opération d’E/S, ou l’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 s’exécuter au PASSIVE_LEVEL IRQL. Toutefois, il est sûr que les pilotes minifilter appellent 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 qui provient de la demande de IRP_MJ_CREATE.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête fltkernel.h (include 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