Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
Zeigen Sie auf ein undurchsichtiges Synchronisierungsobjekt für die Änderungsverzeichnisbenachrichtigungsliste, auf die die NotifyList Parameter verweist.
[in, out] NotifyList
Zeigen Sie auf die Kopfzeile der Änderungsverzeichnisbenachrichtigungsliste für das aktuelle Volume. Jedes Element in der Liste ist eine undurchsichtige Benachrichtigungsstruktur.
[in] FsContext
Zeigen Sie auf einen eindeutigen Wert, der vom Aufrufer zugewiesen wurde, um die zu erstellende Benachrichtigungsstruktur zu identifizieren. Wenn eine Rückrufroutine im parameter TraverseCallback angegeben wird, wird FsContext- als NotifyContext Parameter an diese Routine übergeben.
[in] FullDirectoryName
Zeigen Sie 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 auf TRUE- fest, wenn alle Unterverzeichnisse des Verzeichnisses, das durch den Parameter FullDirectoryName angegeben wird, ebenfalls überwacht werden sollen. Wird auf FALSE- festgelegt, wenn nur das Verzeichnis selbst überwacht werden soll.
[in] IgnoreBuffer
Auf TRUE- festgelegt, um alle 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 Typen von Änderungen an Dateien oder Verzeichnissen angeben, die dazu führen sollten, dass die Rückrufdatenstrukturen in der Benachrichtigungsliste abgeschlossen werden. Die möglichen Flagwerte werden in der folgenden Tabelle beschrieben.
| Flagge | 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. der Zeitpunkt des letzten Zugriffs, wurde geändert. |
| FILE_NOTIFY_CHANGE_SIZE | Die Größe dieser Datei wurde geändert. |
| FILE_NOTIFY_CHANGE_LAST_WRITE | Die Uhrzeit der letzten Änderung dieser Datei wurde geändert. |
| FILE_NOTIFY_CHANGE_LAST_ACCESS | Die Uhrzeit des letzten Zugriffs dieser Datei wurde geändert. |
| FILE_NOTIFY_CHANGE_CREATION | Die Erstellungszeit dieser Datei wurde 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 Dateidatenstroms wurde geändert. |
| FILE_NOTIFY_CHANGE_STREAM_WRITE | Die Daten dieses Dateidatenstroms wurden geändert. |
[in] NotifyCallbackData
Zeigen Sie auf die Rückrufdatenstruktur, damit der Vorgang der Benachrichtigungsliste hinzugefügt wird. Dieser Parameter ist erforderlich und kann nicht NULL-werden.
[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 Anrufer 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 den Kontext freigibt und die Struktur nach der Verwendung freigibt. Wenn eine TraverseCallback- Routine bereitgestellt 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 im Verzeichnis auftritt. Wenn diese Rückrufroutine TRUEzurückgibt, führt FsRtlNotifyFilterReportChange die ausstehenden IRP_MN_NOTIFY_CHANGE_DIRECTORY Vorgänge in der Benachrichtigungsliste aus; andernfalls ist dies nicht der Fall. Eine solche vom Anrufer bereitgestellte Routine wird wie folgt deklariert:
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
Rückgabewert
Nichts
Bemerkungen
Ein Minifiltertreiber kann FltNotifyFilterChangeDirectory aus der Preoperation-Rückrufroutine (PFLT_PRE_OPERATION_CALLBACK) aufrufen, die für die Verarbeitung von Änderungsverzeichnisvorgängen registriert wurde. Diese Vorgänge weisen einen wichtigen Funktionscode von IRP_MJ_DIRECTORY_CONTROL und einen Hilfsfunktionscode von IRP_MN_NOTIFY_CHANGE_DIRECTORY auf.
Der Minifiltertreiber ruft FltNotifyFilterChangeDirectory auf, um eine Benachrichtigungsstruktur zum Halten der Rückrufdatenstruktur für den Vorgang zu erstellen und die Benachrichtigungsstruktur der Benachrichtigungsliste für das aktuelle Volume hinzuzufügen.
FltNotifyFilterChangeDirectory führt folgende Aktionen aus:
- Überprüft, ob das Dateiobjekt des Vorgangs bereinigt wurde. Wenn dies der Fall ist, führt FltNotifyFilterChangeDirectory den Vorgang mit dem Status STATUS_NOTIFY_CLEANUP aus und fügt ihn nicht zur 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 am Bericht vorliegen, schließt FltNotifyFilterChangeDirectory die Rückrufdatenstruktur ab, auf die durch den parameter NotifyCallbackData verwiesen wird. Wenn eine Benachrichtigungsstruktur gefunden wird, aber keine ausstehenden Änderungen an berichten, FltNotifyFilterChangeDirectory fügt 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- | Universal |
| Header- | fltkernel.h (include Fltkernel.h) |
| Library | FltMgr.lib |
| DLL- | Fltmgr.sys |
| IRQL- | <= APC_LEVEL |