FsRtlNotifyFullChangeDirectory-Makro (rxprocs.h)
Die FsRtlNotifyFullChangeDirectory Routine erstellt eine Benachrichtigungsstruktur für eine Benachrichtigungsanforderung und fügt sie der angegebenen Benachrichtigungsliste hinzu.
Syntax
void FsRtlNotifyFullChangeDirectory(
A1,
A2,
A3,
A4,
A5,
A6,
A7,
A8,
A9,
A10
);
Parameter
A1
Ein Zeiger auf ein undurchsichtiges Synchronisierungsobjekt für die Benachrichtigungsliste für das aktuelle Volume.
A2
Ein Zeiger auf den Kopf einer Benachrichtigungsliste. Jedes Element in der Liste ist eine undurchsichtige Benachrichtigungsstruktur.
A3
Ein Zeiger auf einen eindeutigen Wert, der vom Dateisystem zugewiesen wird, um die zu erstellende Benachrichtigungsstruktur zu identifizieren, die zu einem bestimmten Dateiobjekt gehört. Wenn eine TraverseCallback- Routine angegeben wird, wird FsContext- als NotifyContext Parameter an diese Routine übergeben.
A4
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.
A5
Legen Sie auf TRUE fest, wenn auch alle Unterverzeichnisse dieses Verzeichnisses überwacht werden sollen. Wird auf FALSE- festgelegt, wenn nur das Verzeichnis selbst überwacht werden soll. Wird ignoriert, wenn NotifyIrp-NULL-ist.
A6
Auf TRUE- festgelegt, 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.
A7
Bitmaske von Flags, die die Typen von Änderungen an Dateien oder Unterverzeichnissen angeben, die dazu führen sollten, dass die Warteschlange ausstehende Benachrichtigungs-IRPs abgeschlossen wird. Die möglichen Flagwerte werden wie folgt 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. |
CompletionFilter- wird ignoriert, wenn NotifyIrp-NULL-ist.
A8
Ein Zeiger auf das IRP, um die Änderung zu benachrichtigen. Wenn NotifyIrpNULL-ist, bedeutet dies, dass der durch dieses Dateiobjekt dargestellte Dateidatenstrom gelöscht wird.
A9
Optionaler Zeiger auf eine Rückrufroutine, die aufgerufen werden soll, wenn eine Änderung in einem Unterverzeichnis auftritt, das in einer Verzeichnisstruktur überwacht wird. Auf diese Weise 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 parameter TargetContext finden Sie im TargetContext- Parameter von FsRtlNotifyFullReportChange. TraverseCallback- wird ignoriert, wenn NotifyIrp-NULL-ist.
A10
Ein Zeiger auf eine Kontextstruktur, die an TraverseCallback-übergeben werden soll. FsRtlNotifyFullChangeDirectory den Kontext freigibt und die Struktur nach der Verwendung freigibt. Wird ignoriert, wenn NotifyIrp-NULL-ist. Wenn eine TraverseCallback- Routine bereitgestellt wird, wird SubjectContext- als SubjectContext Parameter an diese Routine übergeben.
Rückgabewert
Nichts
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 NotifyIrpNULL-ist, überprüft FsRtlNotifyFullChangeDirectory, ob die Benachrichtigungsliste ein ausstehendes IRP enthält, das sich auf dieses Dateiobjekt bezieht und in diesem Fall mit STATUS_DELETE_PENDING abgeschlossen ist.
Wenn NotifyIrp nicht NULL-ist, führt FsRtlNotifyFullChange Directory folgendes aus:
- Überprüft, ob das Dateiobjekt die Bereinigung durchlaufen hat. Wenn dies der Fall ist, schließt FsRtlNotifyFullChangeDirectory die Benachrichtigungs-IRP mit status STATUS_NOTIFY_CLEANUP ab.
- Wenn das Dateiobjekt keine Bereinigung durchlaufen hat, überprüft FsRtlNotifyFullChangeDirectory, ob die Benachrichtigungsliste für dieses Volume bereits eine Benachrichtigungsstruktur für diese Änderung enthält. In diesem Fall FsRtlNotifyFullChangeDirectory alle ausstehenden IRPs abgeschlossen. Andernfalls wird FsRtlNotifyFullChangeDirectory die Benachrichtigungs-IRP als ausstehend markiert, eine Benachrichtigungsstruktur erstellt und in die Liste eingefügt.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | rxprocs.h (include Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | PASSIVE_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |