FsRtlNotifyFullChangeDirectory-Funktion (ntifs.h)
Die FsRtlNotifyFullChangeDirectory-Routine erstellt eine Benachrichtigungsstruktur für eine Benachrichtigungsanforderung und fügt sie der angegebenen Benachrichtigungsliste hinzu.
Syntax
void FsRtlNotifyFullChangeDirectory(
[in] PNOTIFY_SYNC NotifySync,
[in] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in, optional] PIRP NotifyIrp,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext
);
Parameter
[in] NotifySync
Ein Zeiger auf ein undurchsichtiges Synchronisierungsobjekt für die Benachrichtigungsliste für das aktuelle Volume.
[in] NotifyList
Ein Zeiger auf den Kopf einer Benachrichtigungsliste. Jedes Element in der Liste ist eine undurchsichtige Benachrichtigungsstruktur.
[in] FsContext
Ein Zeiger auf einen eindeutigen Wert, der vom Dateisystem zugewiesen wird, um die zu erstellende Benachrichtigungsstruktur als zu einem bestimmten Dateiobjekt zu identifizieren. Wenn eine TraverseCallback-Routine angegeben wird, wird FsContext als NotifyContext-Parameter an diese Routine übergeben.
[in] FullDirectoryName
Ein Zeiger auf eine ANSI- oder Unicode-Zeichenfolge, die den vollständigen Namen für das Verzeichnis enthält, das dieser Benachrichtigungsstruktur zugeordnet ist. Wird ignoriert, wenn NotifyIrp NULL ist.
[in] WatchTree
Legen Sie auf TRUE fest, wenn alle Unterverzeichnisse dieses Verzeichnisses ebenfalls überwacht werden sollen. Legen Sie auf FALSE fest, wenn nur das Verzeichnis selbst überwacht werden soll. Wird ignoriert, wenn NotifyIrp NULL ist.
[in] IgnoreBuffer
Legen Sie auf TRUE fest, um alle Benutzerpuffer zu ignorieren und zu erzwingen, dass das Verzeichnis erneut aufgezählt wird. Diese Aktion beschleunigt den Vorgang. Wird ignoriert, wenn NotifyIrp NULL ist.
[in] CompletionFilter
Bitmaske von Flags, die die Arten von Änderungen an Dateien oder Unterverzeichnissen angeben, die dazu führen sollen, dass die Warteschlange der ausstehenden Benachrichtigungs-IRPs abgeschlossen wird. In der folgenden Tabelle werden die möglichen Flagwerte beschrieben.
Flag | Bedeutung |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | In diesem Verzeichnis wurde eine Datei hinzugefügt, gelöscht oder umbenannt. |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | Ein Unterverzeichnis wurde erstellt, entfernt oder umbenannt. |
FILE_NOTIFY_CHANGE_NAME (0x0003) | Der Name dieses Verzeichnisses wurde geändert. |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | Der Wert eines Attributs dieser Datei, z. B. die Uhrzeit des letzten Zugriffs, wurde geändert. |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | Die Größe dieser Datei hat sich geändert. |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | Die Letzte Änderungszeit dieser Datei wurde geändert. |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | Die Letzte Zugriffszeit dieser Datei wurde geändert. |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | Die Erstellungszeit dieser Datei hat sich geändert. |
FILE_NOTIFY_CHANGE_EA (0x0080) | Die erweiterten Attribute dieser Datei wurden geändert. |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | Die Sicherheitsinformationen dieser Datei wurden geändert. |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | In diesem Verzeichnis wurde ein Dateistream hinzugefügt, gelöscht oder umbenannt. |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | Die Größe dieses Dateistreams wurde geändert. |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | Die Daten dieses Dateistreams wurden geändert. |
CompletionFilter wird ignoriert, wenn NotifyIrp NULL ist.
[in, optional] NotifyIrp
Ein Zeiger auf den IRP, der bei der Änderung der Benachrichtigung abgeschlossen werden soll. Wenn NotifyIrp NULL ist, bedeutet dies, dass der von diesem Dateiobjekt dargestellte Dateistream gelöscht wird.
[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. Dadurch 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 von FsRtlNotifyFullReportChange. TraverseCallback wird ignoriert, wenn NotifyIrp NULL ist.
[in, optional] SubjectContext
Ein Zeiger auf eine SECURITY_SUBJECT_CONTEXT Struktur, die an TraverseCallback übergeben werden soll. FsRtlNotifyFullChangeDirectory gibt den Kontext frei und gibt die Struktur nach der Verwendung frei. Wird ignoriert, wenn NotifyIrp NULL ist. Wenn eine TraverseCallback-Routine angegeben wird, wird SubjectContext als SubjectContext-Parameter an diese Routine übergeben.
Rückgabewert
Keine
Bemerkungen
FsRtlNotifyFullChangeDirectory wird von einem Dateisystem aufgerufen, das eine Benachrichtigungsänderungsanforderung erhalten hat. Diese Anforderung wird als IRP mit Hauptfunktionscode IRP_MJ_DIRECTORY_CONTROL, Nebenfunktionscode IRP_MN_NOTIFY_CHANGE_DIRECTORY empfangen.
Wenn NotifyIrp NULL ist, überprüft FsRtlNotifyFullChangeDirectory , ob die Benachrichtigungsliste einen ausstehenden IRP enthält, der auf dieses Dateiobjekt verweist, und schließt sie, falls ja, mit STATUS_DELETE_PENDING ab.
Wenn NotifyIrp nicht NULL ist, führt FsRtlNotifyFullChangeDirectory folgende Schritte aus:
Überprüft, ob das Dateiobjekt bereinigungen wurde. In diesem Fall schließt FsRtlNotifyFullChangeDirectory die Benachrichtigungs-IRP mit status STATUS_NOTIFY_CLEANUP ab.
Wenn das Dateiobjekt nicht bebereinigt wurde, überprüft FsRtlNotifyFullChangeDirectory , ob die Benachrichtigungsliste für dieses Volume bereits eine Benachrichtigungsstruktur für diese Änderung enthält. In diesem Fall schließt FsRtlNotifyFullChangeDirectory alle ausstehenden IRPs ab. Andernfalls markiert FsRtlNotifyFullChangeDirectory die Benachrichtigungs-IRP als ausstehend, erstellt eine Benachrichtigungsstruktur und fügt sie in die Liste ein.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | ntifs.h (include Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |