FltNotifyFilterChangeDirectory-Funktion (fltkernel.h)
Die FltNotifyFilterChangeDirectory-Routine erstellt eine Benachrichtigungsstruktur für einen IRP_MN_NOTIFY_CHANGE_DIRECTORY Vorgang und fügt sie der angegebenen Benachrichtigungsliste hinzu.
Syntax
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
);
Parameter
[in, out] NotifySync
Zeiger auf ein undurchsichtiges Synchronisierungsobjekt für die Änderungsverzeichnisbenachrichtigungsliste, auf die der NotifyList-Parameter verweist.
[in, out] NotifyList
Zeiger auf den Kopf der Änderungsverzeichnisbenachrichtigungsliste für das aktuelle Volume. Jedes Element in der Liste ist eine undurchsichtige Benachrichtigungsstruktur.
[in] FsContext
Zeiger auf einen eindeutigen Wert, der vom Aufrufer zugewiesen wird, um die zu erstellende Benachrichtigungsstruktur zu identifizieren. Wenn eine Rückrufroutine im TraverseCallback-Parameter angegeben wird, wird FsContext als NotifyContext-Parameter an diese Routine übergeben.
[in] FullDirectoryName
Zeiger auf eine ANSI- oder Unicode-Zeichenfolge, die den vollständigen Namen für das Verzeichnis enthält, das dieser Benachrichtigungsstruktur zugeordnet ist.
[in] WatchTree
Legen Sie diesen Wert auf TRUE fest, wenn alle Unterverzeichnisse des Verzeichnisses, das durch den Parameter FullDirectoryName angegeben wird, ebenfalls überwacht werden sollen. Legen Sie auf FALSE fest, wenn nur das Verzeichnis selbst überwacht werden soll.
[in] IgnoreBuffer
Legen Sie diese Einstellung auf TRUE fest, um Benutzerpuffer zu ignorieren und zu erzwingen, dass das Verzeichnis erneut aufgezählt wird. Diese Aktion beschleunigt den Vorgang.
[in] CompletionFilter
Bitmaske von Flags, die die Arten von Änderungen an Dateien oder Verzeichnissen angeben, die dazu führen sollen, dass die Rückrufdatenstrukturen in der Benachrichtigungsliste abgeschlossen werden. Die möglichen Flagwerte werden in der folgenden Tabelle beschrieben.
Flag | Bedeutung |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME | Eine Datei wurde in diesem Verzeichnis hinzugefügt, gelöscht oder umbenannt. |
FILE_NOTIFY_CHANGE_DIR_NAME | Ein Unterverzeichnis wurde erstellt, entfernt oder umbenannt. |
FILE_NOTIFY_CHANGE_NAME | Der Name dieses Verzeichnisses wurde geändert. |
FILE_NOTIFY_CHANGE_ATTRIBUTES | Der Wert eines Attributs dieser Datei, z. B. zeitpunkt des letzten Zugriffs, hat sich geändert. |
FILE_NOTIFY_CHANGE_SIZE | Die Größe dieser Datei hat sich geändert. |
FILE_NOTIFY_CHANGE_LAST_WRITE | Der Zeitpunkt der letzten Änderung dieser Datei wurde geändert. |
FILE_NOTIFY_CHANGE_LAST_ACCESS | Der Zeitpunkt des letzten Zugriffs dieser Datei wurde geändert. |
FILE_NOTIFY_CHANGE_CREATION | Die Erstellungszeit dieser Datei hat sich geändert. |
FILE_NOTIFY_CHANGE_EA | Die erweiterten Attribute dieser Datei wurden geändert. |
FILE_NOTIFY_CHANGE_SECURITY | Die Sicherheitsinformationen dieser Datei wurden geändert. |
FILE_NOTIFY_CHANGE_STREAM_NAME | In diesem Verzeichnis wurde ein Dateidatenstrom hinzugefügt, gelöscht oder umbenannt. |
FILE_NOTIFY_CHANGE_STREAM_SIZE | Die Größe dieses Dateistreams hat sich geändert. |
FILE_NOTIFY_CHANGE_STREAM_WRITE | Die Daten dieses Dateistreams wurden geändert. |
[in] NotifyCallbackData
Zeiger auf die Rückrufdatenstruktur für den Vorgang, der der Benachrichtigungsliste hinzugefügt werden soll. Dieser Parameter ist erforderlich und darf nicht NULL sein.
[in, optional] TraverseCallback
Optionaler Zeiger auf eine Rückrufroutine, die aufgerufen werden soll, wenn eine Änderung in einem Unterverzeichnis auftritt, das in einer Verzeichnisstruktur überwacht wird. Mit diesem Zeiger kann das Dateisystem überprüfen, ob der Watcher zugriff auf dieses Verzeichnis hat. Eine solche vom Aufrufer bereitgestellte Routine wird wie folgt deklariert:
NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
IN PVOID NotifyContext, // FsContext
IN PVOID TargetContext, // Context pointer
IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
);
Weitere Informationen zum TargetContext-Parameter finden Sie im TargetContext-Parameter der FsRtlNotifyFullReportChange-Routine .
[in, optional] SubjectContext
Zeiger auf eine Kontextstruktur, die an TraverseCallback übergeben werden soll. FltNotifyFilterChangeDirectory gibt den Kontext frei und gibt die Struktur frei, nachdem er verwendet wurde. Wenn eine TraverseCallback-Routine angegeben wird, wird SubjectContext als SubjectContext-Parameter an diese Routine übergeben.
[in, optional] FilterCallback
Optionaler Zeiger auf eine Rückrufroutine, die aufgerufen werden soll, wenn eine Änderung am Verzeichnis auftritt. Wenn diese Rückrufroutine TRUE zurückgibt, schließt FsRtlNotifyFilterReportChange die ausstehenden IRP_MN_NOTIFY_CHANGE_DIRECTORY Vorgänge in der Benachrichtigungsliste ab. andernfalls ist dies nicht der Fall. Eine solche vom Aufrufer bereitgestellte Routine wird wie folgt deklariert:
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
Rückgabewert
Keine
Bemerkungen
Ein Minifiltertreiber kann FltNotifyFilterChangeDirectory aus der Preoperation-Rückrufroutine (PFLT_PRE_OPERATION_CALLBACK) aufrufen, die er für die Verarbeitung von Änderungsverzeichnisvorgängen registriert hat. Diese Vorgänge verfügen über den Hauptfunktionscode IRP_MJ_DIRECTORY_CONTROL und den Nebenfunktionscode IRP_MN_NOTIFY_CHANGE_DIRECTORY.
Der Minifiltertreiber ruft FltNotifyFilterChangeDirectory auf, um eine Benachrichtigungsstruktur zu erstellen, die die Rückrufdatenstruktur für den Vorgang enthält, und fügt die Benachrichtigungsstruktur der Benachrichtigungsliste für das aktuelle Volume hinzu.
FltNotifyFilterChangeDirectory führt Folgendes aus:
- Überprüft, ob das Dateiobjekt des Vorgangs bereinigt wurde. Wenn dies der Fall ist, schließt FltNotifyFilterChangeDirectory den Vorgang mit status STATUS_NOTIFY_CLEANUP ab und fügt ihn nicht der Benachrichtigungsliste hinzu.
- Wenn das Dateiobjekt des Vorgangs nicht bereinigt wurde, überprüft FltNotifyFilterChangeDirectory , ob die Benachrichtigungsliste bereits eine Benachrichtigungsstruktur für den angegebenen FsContext-Wert enthält. Wenn eine solche Benachrichtigungsstruktur gefunden wird und ausstehende Änderungen für den Bericht vorliegen, schließt FltNotifyFilterChangeDirectory die Rückrufdatenstruktur ab, auf die der NotifyCallbackData-Parameter verweist. Wenn eine Benachrichtigungsstruktur gefunden wird, aber keine ausstehenden Änderungen zu melden sind, fügt FltNotifyFilterChangeDirectory den Vorgang der Benachrichtigungsstruktur hinzu. Wenn keine solche Benachrichtigungsstruktur gefunden wird, erstellt FltNotifyFilterChangeDirectory eine Benachrichtigungsstruktur für den Vorgang und fügt sie in die Liste ein.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | fltkernel.h (fltkernel.h einschließen) |
Bibliothek | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |