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