Partager via


FsRtlNotifyFullChangeDirectory, fonction (ntifs.h)

La routine FsRtlNotifyFullChangeDirectory crée une structure de notification pour une demande de notification et l’ajoute à la liste de notifications spécifiée.

Syntaxe

void FsRtlNotifyFullChangeDirectory(
  [in]           PNOTIFY_SYNC               NotifySync,
  [in]           PLIST_ENTRY                NotifyList,
  [in]           PVOID                      FsContext,
  [in]           PSTRING                    FullDirectoryName,
  [in]           BOOLEAN                    WatchTree,
  [in]           BOOLEAN                    IgnoreBuffer,
  [in]           ULONG                      CompletionFilter,
  [in, optional] PIRP                       NotifyIrp,
  [in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
  [in, optional] PSECURITY_SUBJECT_CONTEXT  SubjectContext
);

Paramètres

[in] NotifySync

Pointeur vers un objet de synchronisation opaque pour la liste des notifications pour le volume actuel.

[in] NotifyList

Pointeur vers la tête d’une liste d’notifications. Chaque élément de la liste est une structure de notification opaque.

[in] FsContext

Pointeur vers une valeur unique affectée par le système de fichiers pour identifier la structure de notification à créer comme appartenant à un objet de fichier particulier. Si une routine TraverseCallback est fournie, FsContext est transmis en tant que paramètre NotifyContext à cette routine.

[in] FullDirectoryName

Pointeur vers une chaîne ANSI ou Unicode qui contient le nom complet du répertoire associé à cette structure de notification. Ignoré si NotifyIrp a la valeur NULL.

[in] WatchTree

Définissez la valeur TRUE si tous les sous-répertoires de ce répertoire doivent également être regardés. Défini sur FALSE si seul le répertoire lui-même doit être regardé. Ignoré si NotifyIrp a la valeur NULL.

[in] IgnoreBuffer

Définissez la valeur TRUE pour ignorer les mémoires tampons utilisateur et forcer la réumation du répertoire. Cette action accélère l’opération. Ignoré si NotifyIrp a la valeur NULL.

[in] CompletionFilter

Masque de bits des indicateurs qui spécifient les types de modifications apportées aux fichiers ou sous-répertoires qui doivent entraîner la fin de la file d’attente des irps de notification en attente. Le tableau suivant décrit les valeurs d’indicateur possibles.

Drapeau Signification
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) Un fichier a été ajouté, supprimé ou renommé dans ce répertoire.
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) Un sous-répertoire a été créé, supprimé ou renommé.
FILE_NOTIFY_CHANGE_NAME (0x0003) Le nom de ce répertoire a changé.
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) La valeur d’un attribut de ce fichier, tel que la dernière heure d’accès, a changé.
FILE_NOTIFY_CHANGE_SIZE (0x0008) La taille de ce fichier a changé.
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) L’heure de la dernière modification de ce fichier a changé.
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) La dernière heure d’accès de ce fichier a changé.
FILE_NOTIFY_CHANGE_CREATION (0x0040) L’heure de création de ce fichier a changé.
FILE_NOTIFY_CHANGE_EA (0x0080) Les attributs étendus de ce fichier ont été modifiés.
FILE_NOTIFY_CHANGE_SECURITY (0x0100) Les informations de sécurité de ce fichier ont changé.
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) Un flux de fichiers a été ajouté, supprimé ou renommé dans ce répertoire.
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) La taille de ce flux de fichiers a changé.
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) Les données de ce flux de fichiers ont changé.

CompletionFilter est ignoré si NotifyIrp a la valeur NULL.

[in, optional] NotifyIrp

Pointeur vers l’IRP à terminer lors de la notification de modification. Si NotifyIrp a la valeur NULL, cela signifie que le flux de fichiers représenté par cet objet de fichier est supprimé.

[in, optional] TraverseCallback

Pointeur facultatif vers une routine de rappel à appeler lorsqu’une modification se produit dans un sous-répertoire surveillé dans une arborescence d’annuaires. Cela permet au système de fichiers de vérifier si l’observateur a accès à ce répertoire. Une telle routine fournie par l’appelant est déclarée comme suit :

NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID TargetContext,                     // Context pointer
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
    );

Pour plus d’informations sur le paramètre TargetContext , consultez le paramètre TargetContext de FsRtlNotifyFullReportChange. TraverseCallback est ignoré si NotifyIrp a la valeur NULL.

[in, optional] SubjectContext

Pointeur vers une structure SECURITY_SUBJECT_CONTEXT à passer à TraverseCallback. FsRtlNotifyFullChangeDirectory libère le contexte et libère la structure après l’avoir utilisée. Ignoré si NotifyIrp a la valeur NULL. Si une routine TraverseCallback est fournie, SubjectContext est passé en tant que paramètre SubjectContext à cette routine.

Valeur de retour

Aucun

Remarques

FsRtlNotifyFullChangeDirectory est appelé par un système de fichiers qui a reçu une demande de modification de notification. Cette requête est reçue en tant qu’IRP avec le code de fonction principal IRP_MJ_DIRECTORY_CONTROL, le code de fonction secondaire IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Si NotifyIrp a la valeur NULL, FsRtlNotifyFullChangeDirectory vérifie si la liste de notifications contient un IRP en attente qui fait référence à cet objet de fichier et, le cas échéant, le termine avec STATUS_DELETE_PENDING.

Si NotifyIrp n’est pas NULL, FsRtlNotifyFullChangeDirectory effectue les opérations suivantes :

  • Vérifie si l’objet de fichier a subi un nettoyage. Si c’est le cas, FsRtlNotifyFullChangeDirectory termine l’IRP de notification avec l’état STATUS_NOTIFY_CLEANUP.

  • Si l’objet de fichier n’a pas subi de nettoyage, FsRtlNotifyFullChangeDirectory vérifie si la liste des notifications pour ce volume contient déjà une structure de notification pour cette modification. Si c’est le cas, FsRtlNotifyFullChangeDirectory termine les irps en attente. Si ce n’est pas le cas, FsRtlNotifyFullChangeDirectory marque l’IRP de notification comme étant en attente, crée une structure de notification et l’insère dans la liste.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête ntifs.h (include Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Voir aussi

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT