Fonction FltNotifyFilterChangeDirectory (fltkernel.h)

La routine FltNotifyFilterChangeDirectory crée une structure de notification pour une opération de IRP_MN_NOTIFY_CHANGE_DIRECTORY et l’ajoute à la liste de notification spécifiée.

Syntaxe

VOID FLTAPI FltNotifyFilterChangeDirectory(
  [in, out]      PNOTIFY_SYNC               NotifySync,
  [in, out]      PLIST_ENTRY                NotifyList,
  [in]           PVOID                      FsContext,
  [in]           PSTRING                    FullDirectoryName,
  [in]           BOOLEAN                    WatchTree,
  [in]           BOOLEAN                    IgnoreBuffer,
  [in]           ULONG                      CompletionFilter,
  [in]           PFLT_CALLBACK_DATA         NotifyCallbackData,
  [in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
  [in, optional] PSECURITY_SUBJECT_CONTEXT  SubjectContext,
  [in, optional] PFILTER_REPORT_CHANGE      FilterCallback
);

Paramètres

[in, out] NotifySync

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

[in, out] 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 l’appelant pour identifier la structure de notification à créer. Si une routine de rappel est fournie dans le paramètre TraverseCallback , 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.

[in] WatchTree

Définissez sur TRUE si tous les sous-répertoires du répertoire spécifié par le paramètre FullDirectoryName doivent également être surveillés. Définissez sur FALSE si seul le répertoire lui-même doit être surveillé.

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

[in] CompletionFilter

Masque de bits des indicateurs qui spécifient les types de modifications apportées aux fichiers ou répertoires qui doivent entraîner l’achèvement des structures de données de rappel dans la liste de notification. Les valeurs d’indicateur possibles sont décrites dans le tableau suivant.

Indicateur Signification
FILE_NOTIFY_CHANGE_FILE_NAME Un fichier a été ajouté, supprimé ou renommé dans ce répertoire.
FILE_NOTIFY_CHANGE_DIR_NAME Un sous-répertoire a été créé, supprimé ou renommé.
FILE_NOTIFY_CHANGE_NAME Le nom de ce répertoire a changé.
FILE_NOTIFY_CHANGE_ATTRIBUTES La valeur d’un attribut de ce fichier, comme l’heure du dernier accès, a changé.
FILE_NOTIFY_CHANGE_SIZE La taille de ce fichier a changé.
FILE_NOTIFY_CHANGE_LAST_WRITE L’heure de la dernière modification de ce fichier a changé.
FILE_NOTIFY_CHANGE_LAST_ACCESS L’heure du dernier accès de ce fichier a changé.
FILE_NOTIFY_CHANGE_CREATION L’heure de création de ce fichier a changé.
FILE_NOTIFY_CHANGE_EA Les attributs étendus de ce fichier ont été modifiés.
FILE_NOTIFY_CHANGE_SECURITY Les informations de sécurité de ce fichier ont changé.
FILE_NOTIFY_CHANGE_STREAM_NAME Un flux de fichiers a été ajouté, supprimé ou renommé dans ce répertoire.
FILE_NOTIFY_CHANGE_STREAM_SIZE La taille de ce flux de fichiers a changé.
FILE_NOTIFY_CHANGE_STREAM_WRITE Les données de ce flux de fichiers ont changé.

[in] NotifyCallbackData

Pointeur vers la structure de données de rappel pour l’opération à ajouter à la liste de notification. Ce paramètre est obligatoire et ne peut pas être NULL.

[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. Ce pointeur 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 la routine FsRtlNotifyFullReportChange .

[in, optional] SubjectContext

Pointeur vers une structure de contexte à passer à TraverseCallback. FltNotifyFilterChangeDirectory libère le contexte et libère la structure après l’avoir utilisée. 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 opérations de 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

Un pilote minifilter peut appeler FltNotifyFilterChangeDirectory à partir de la routine de rappel de préopération (PFLT_PRE_OPERATION_CALLBACK) qu’il a inscrite pour traiter les opérations de notification de modification d’annuaire. Ces opérations ont un code de fonction principal de IRP_MJ_DIRECTORY_CONTROL et un code de fonction secondaire de IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Le pilote minifilter appelle FltNotifyFilterChangeDirectory pour créer une structure de notification afin de contenir la structure de données de rappel de l’opération et d’ajouter la structure de notification à la liste des notifications pour le volume actuel.

FltNotifyFilterChangeDirectory effectue les opérations suivantes :

  • Vérifie si l’objet fichier de l’opération a été nettoyé. Dans ce cas, FltNotifyFilterChangeDirectory termine l’opération avec status STATUS_NOTIFY_CLEANUP et ne l’ajoute pas à la liste des notifications.
  • Si l’objet file de l’opération n’a pas été nettoyé, FltNotifyFilterChangeDirectory 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, FltNotifyFilterChangeDirectory termine la structure de données de rappel pointée par le paramètre NotifyCallbackData . Si une structure de notification est trouvée, mais qu’aucune modification n’est en attente de rapport, FltNotifyFilterChangeDirectory ajoute l’opération à la structure de notification. Si aucune structure de notification de ce type n’est trouvée, FltNotifyFilterChangeDirectory crée une structure de notification pour l’opération et l’insère dans la liste.
Lorsqu’une modification se produit dans le répertoire, le système de fichiers appelle FsRtlNotifyFilterReportChange pour terminer les opérations de IRP_MN_NOTIFY_CHANGE_DIRECTORY en attente dans la liste de notification.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête fltkernel.h (inclure Fltkernel.h)
Bibliothèque FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Voir aussi

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK