Partager via


IoCancelFileOpen, fonction (ntddk.h)

La routine IoCancelFileOpen peut être utilisée par un pilote de filtre de système de fichiers pour fermer un fichier ouvert par un pilote de système de fichiers dans la pile d’appareils du pilote de filtre.

Syntaxe

void IoCancelFileOpen(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PFILE_OBJECT   FileObject
);

Paramètres

[in] DeviceObject

Pointeur vers le haut de la pile d’appareils immédiatement en dessous de l’objet de périphérique du pilote de filtre.

[in] FileObject

Pointeur vers l’objet fichier à fermer.

Valeur de retour

Aucun

Remarques

Si un pilote de filtre de système de fichiers détermine qu’une demande de création de fichiers ou d’ouverture de fichier doit échouer une fois que les pilotes de niveau inférieur ont déjà terminé la demande avec STATUS_SUCCESS, elle peut utiliser IoCancelFileOpen pour fermer le fichier ouvert par les pilotes de niveau inférieur.

Bien que STATUS_REPARSE soit une valeur NTSTATUS réussie, il n’est pas nécessaire d’appeler IoCancelFileOpen 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é correctement ouvert.

Un appel réussi à IoCancelFileOpen a l’effet suivant : Pour les minifilters et les filtres hérités qui se trouvent au-dessus de l’appelant dans la pile du système de fichiers, 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 IoCancelFileOpen n’annule aucune modification du fichier. Par exemple, IoCancelFileOpen ne supprime pas un fichier nouvellement créé ou ne restaure pas un fichier qui a été remplacé ou remplacé à son état précédent.

Voici un exemple classique :

  • Un pilote de filtre existe entre un pilote de filtre de niveau supérieur et un pilote de système de fichiers de niveau inférieur.

  • Le pilote de filtre transmet une demande de IRP_MJ_CREATE à la pile des appareils au pilote du système de fichiers, et le pilote du système de fichiers termine la demande de IRP_MJ_CREATE avec l’état STATUS_SUCCESS.

  • Avant que le pilote de filtre termine la demande de création, il détermine que le fichier doit être fermé.

  • Le pilote de filtre utilise IoCancelFileOpen pour fermer le fichier ouvert par le pilote du système de fichiers.

Après avoir appelé IoCancelFileOpen, le pilote de filtre doit terminer la demande de création avec un code d’erreur approprié tel que STATUS_UNSUCCESSFUL ou STATUS_ACCESS_DENIED. En outre, il doit définir le champ Irp->IoStatus.Information sur zéro.

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

IoCancelFileOpen définit l’indicateur de FO_FILE_OPEN_CANCELLED dans le membre d’indicateurs de de l’objet de fichier vers lequel FileObject pointe. Cet indicateur indique que la demande de IRP_MJ_CREATE a été annulée et qu’une demande de 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, autrement dit, STATUS_REPARSE ne peut pas être retournée par le pilote de filtre hérité s’il a appelé la routine IoCreateFileOpen.

Les minifiltres doivent utiliser fltCancelFileOpen au lieu de IoCancelFileOpen.

Exigences

Exigence Valeur
client minimum pris en charge Cette routine est disponible sur Microsoft Windows 2000 et versions ultérieures.
plateforme cible Universel
d’en-tête ntddk.h (include Ntddk.h, Ntifs.h, Fltkernel.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Voir aussi

FltCancelFileOpen

FltReissueSynchronousIo

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateFile

ioCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateFile

ZwOpenFile