Partager via


FltNotifyFilterChangeDirectory, fonction (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 notifications 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 du répertoire de modification vers laquelle pointe le paramètre NotifyList .

[in, out] NotifyList

Pointeur vers la tête de la liste de notification du répertoire de modification pour le volume actif. Chaque élément de la liste est une structure de notification opaque.

[in] FsContext

Pointeur vers une valeur unique attribué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éfini sur TRUE si tous les sous-répertoires du répertoire spécifié par le paramètre FullDirectoryName doivent également être surveillés. Défini sur FALSE si seul le répertoire lui-même doit être regardé.

[in] IgnoreBuffer

Défini sur TRUE pour ignorer les mémoires tampons utilisateur et forcer la réumation 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 la fin des structures de données de rappel dans la liste de notification. Les valeurs d’indicateur possibles sont décrites dans le tableau suivant.

Drapeau 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, tel que la dernière heure d’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 La dernière heure d’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 que l’opération soit ajoutée à la liste des notifications. 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 qui est surveillé dans une arborescence de répertoires. Ce pointeur 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 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 sur 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 des notifications ; 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

Aucun

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 du répertoire de modification. Ces opérations ont un code de fonction majeur 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 conserver la structure de données de rappel pour l’opération et d’ajouter la structure de notification à la liste de notification du volume actuel.

FltNotifyFilterChangeDirectory effectue les opérations suivantes :

  • Vérifie si l’objet de fichier de l’opération a été nettoyé. Si c’est le cas, FltNotifyFilterChangeDirectory termine l’opération avec l’état STATUS_NOTIFY_CLEANUP et ne l’ajoute pas à la liste des notifications.
  • Si l’objet de fichier de l’opération n’a pas été nettoyé, FltNotifyFilterChangeDirectory vérifie si la liste de notifications contient déjà une structure de notification pour la valeur FsContext donnée. Si une telle structure de notification est trouvée et qu’il existe des modifications en attente de 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 des notifications.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête fltkernel.h (include Fltkernel.h)
bibliothèque FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Voir aussi

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK