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