Fonction FsRtlNotifyFilterChangeDirectory (ntifs.h)

FsRtlNotifyFilterChangeDirectory crée une structure de notification pour une demande IRP_MN_NOTIFY_CHANGE_DIRECTORY et l’ajoute à la liste de notification spécifiée.

Syntaxe

void FsRtlNotifyFilterChangeDirectory(
  [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,
  [in, optional] PFILTER_REPORT_CHANGE      FilterCallback
);

Paramètres

[in] NotifySync

Pointeur vers un objet de synchronisation opaque pour la liste de notifications de répertoire de modification vers laquelle pointe le paramètre NotifyList .

[in] NotifyList

Pointeur vers le début de la liste de notification du répertoire de modification pour le volume actuel. 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 passé 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 sur TRUE si tous les sous-répertoires de ce répertoire doivent également être surveillés. Définissez sur FALSE si seul le répertoire lui-même doit être surveillé. Ignoré si NotifyIrp a la valeur NULL.

[in] IgnoreBuffer

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

[in] CompletionFilter

Masque de bits d’indicateurs qui spécifient les types de modifications apportées aux fichiers ou répertoires qui doivent entraîner l’achèvement des IRP dans la liste des notifications. Le tableau suivant décrit les valeurs d’indicateur possibles.

Indicateur 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, comme l’heure du dernier 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) L’heure du dernier 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 à ajouter à la liste de notification. Si NotifyIrp a la valeur NULL, cela signifie que le flux de fichiers représenté par l’objet file (identifié par le paramètre FsContext ) est en cours de suppression.

[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 de répertoires. Cela permet au système de fichiers case activée 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. FsRtlNotifyFilterChangeDirectory libère le contexte et libère la structure après l’avoir utilisée. Ce paramètre est ignoré si NotifyIrp a la valeur NULL. Si une routine TraverseCallback est fournie, SubjectContext est passé en tant que paramètre SubjectContext à cette routine.

[in, optional] FilterCallback

Pointeur facultatif vers une routine de rappel à appeler lorsqu’une modification se produit dans le répertoire. Si cette routine de rappel retourne TRUE, FsRtlNotifyFilterReportChange termine les requêtes IRP_MN_NOTIFY_CHANGE_DIRECTORY en attente dans la liste de notification ; sinon, ce n’est pas le cas. Une telle routine fournie par l’appelant est déclarée comme suit :

BOOLEAN
(*PFILTER_REPORT_CHANGE) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID FilterContext                      // Context pointer
    );

Valeur de retour

None

Remarques

FsRtlNotifyFilterChangeDirectory est appelé par un système de fichiers qui a reçu un IRP avec le code de fonction principale IRP_MJ_DIRECTORY_CONTROL, le code de fonction secondaire IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Le système de fichiers appelle FsRtlNotifyFilterChangeDirectory pour créer une structure de notification pour contenir l’IRP et ajouter la structure de notification à la liste de notification pour le volume actuel.

Si NotifyIrp a la valeur NULL, FsRtlNotifyFilterChangeDirectory vérifie si la liste des notifications contient déjà des IRP en attente dont les objets de fichier correspondent à la valeur FsContext donnée et, le cas échéant, termine les IRP avec STATUS_DELETE_PENDING.

Si NotifyIrp n’a pas la valeur NULL, FsRtlNotifyFilterChangeDirectory effectue les opérations suivantes :

  • Vérifie si l’objet fichier de l’IRP a fait l’objet d’un nettoyage. Si c’est le cas, FsRtlNotifyFilterChangeDirectory termine l’IRP avec status STATUS_NOTIFY_CLEANUP et ne l’ajoute pas à la liste de notification.

  • Si l’objet fichier de l’IRP n’a pas fait l’objet d’un nettoyage, FsRtlNotifyFilterChangeDirectory vérifie si la liste de notification contient déjà une structure de notification pour la valeur FsContext donnée. Si une telle structure de notification est trouvée et que des modifications sont en attente dans le rapport, FsRtlNotifyFilterChangeDirectory termine NotifyIrp. Si une structure de notification est trouvée, mais qu’aucune modification n’est en attente de rapport, FsRtlNotifyFilterChangeDirectory marque l’IRP pointé par NotifyIrp comme étant en attente et l’insère dans la liste des irps de notification dans la structure de notification. Si aucune structure de notification de ce type n’est trouvée, FsRtlNotifyFilterChangeDirectory marque l’IRP pointé par NotifyIrp comme étant en attente, crée une structure de notification et l’insère dans la liste des notifications.

Lorsqu’une modification se produit dans le répertoire, le système de fichiers appelle FsRtlNotifyFilterReportChange pour terminer les requêtes IRP_MN_NOTIFY_CHANGE_DIRECTORY en attente dans la liste des notifications.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Correctif cumulatif windows 2000 SP4 ; Windows XP
Plateforme cible Universal
En-tête ntifs.h (include Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < APC_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Voir aussi

FsRtlNotifyFilterReportChange

FsRtlNotifyFullChangeDirectory

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT