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.
Wenn eine Änderung am Verzeichnis auftritt, ruft das Dateisystem FsRtlNotifyFilterReportChange auf, um die ausstehenden IRP_MN_NOTIFY_CHANGE_DIRECTORY Vorgänge in der Benachrichtigungsliste abzuschließen.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header fltkernel.h (fltkernel.h einschließen)
Bibliothek FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Weitere Informationen

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK