FS_FILTER_CALLBACKS-Struktur (ntifs.h)
Die FS_FILTER_CALLBACKS-Struktur enthält die Einstiegspunkte der vom Aufrufer bereitgestellten Benachrichtigungsrückrufroutinen.
Syntax
typedef struct _FS_FILTER_CALLBACKS {
ULONG SizeOfFsFilterCallbacks;
ULONG Reserved;
PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
PFS_FILTER_CALLBACK PreAcquireForCcFlush;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
PFS_FILTER_CALLBACK PreReleaseForCcFlush;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
PFS_FILTER_CALLBACK PreQueryOpen;
PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
Member
SizeOfFsFilterCallbacks
Größe dieser Struktur in Bytes. Legen Sie diese Option auf sizeof(FS_FILTER_CALLBACKS)
fest. SizeOfFsFilterCallbacks darf nicht auf 0 festgelegt werden.
Reserved
Reserviert. Darf nicht verwendet werden.
PreAcquireForSectionSynchronization
Zeiger auf eine FS_FILTER_CALLBACK PreAcquireForSectionSynchronization-Routine .
PostAcquireForSectionSynchronization
Zeiger auf eine FS_FILTER_CALLBACK PostAcquireForSectionSynchronization-Routine .
PreReleaseForSectionSynchronization
Zeiger auf eine FS_FILTER_CALLBACK PreReleaseForSectionSynchronization-Routine .
PostReleaseForSectionSynchronization
Zeiger auf eine FS_FILTER_CALLBACK PostReleaseForSectionSynchronization-Routine .
PreAcquireForCcFlush
Zeiger auf eine FS_FILTER_CALLBACK PreAcquireForCcFlush-Routine .
PostAcquireForCcFlush
Zeiger auf eine FS_FILTER_CALLBACK PostAcquireForCcFlush-Routine .
PreReleaseForCcFlush
Zeiger auf eine FS_FILTER_CALLBACK PreReleaseForCcFlush-Routine .
PostReleaseForCcFlush
Zeiger auf eine FS_FILTER_CALLBACK PostReleaseForCcFlush-Routine .
PreAcquireForModifiedPageWriter
Zeiger auf eine FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter-Routine .
PostAcquireForModifiedPageWriter
Zeiger auf eine FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter-Routine .
PreReleaseForModifiedPageWriter
Zeiger auf eine FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter-Routine .
PostReleaseForModifiedPageWriter
Zeiger auf eine FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter-Routine .
PreQueryOpen
Zeiger auf eine FS_FILTER_CALLBACK PreQueryOpen-Routine .
PostQueryOpen
Zeiger auf eine FS_FILTER_CALLBACK PostQueryOpen-Routine .
Hinweise
Dateisystemfiltertreiber und Dateisysteme rufen die FsRtlRegisterFileSystemFilterCallbacks-Routine auf, um Benachrichtigungsrückrufroutinen zu registrieren, die aufgerufen werden sollen, wenn das zugrunde liegende Dateisystem bestimmte Vorgänge ausführt.
Alle Rückrufeinstiegspunkte sind optional und können NULL sein.
Die FS_FILTER_CALLBACK Filterrückrufroutine und die zugehörigen Parameter sind wie folgt definiert:
typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
OUT PVOID *CompletionContext
);
Parameter | Bedeutung |
---|---|
Daten | Zeiger auf die FS_FILTER_CALLBACK_DATA-Struktur für diesen Vorgang. |
CompletionContext | Kontextinformationen, die an die Rückrufroutine für den Filterabschluss übergeben werden sollen. Wird auf NULL festgelegt, wenn keine Kontextinformationen übergeben werden sollen oder keine entsprechende Rückrufroutine für die Filtervervollständigung vorhanden ist. |
Die FS_FILTER_COMPLETION_CALLBACK Rückrufroutine für den Filterabschluss und die zugehörigen Parameter sind wie folgt definiert:
typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
IN NTSTATUS OperationStatus,
IN PVOID CompletionContext
);
Parameter | Bedeutung |
---|---|
Daten | Zeiger auf die FS_FILTER_CALLBACK_DATA-Struktur für diesen Vorgang. |
OperationStatus | Der Status des Vorgangs. Wenn der Vorgang vom Dateisystem erfolgreich ausgeführt wurde, wird dieser Parameter auf STATUS_SUCCESS festgelegt. Andernfalls wird er auf einen entsprechenden Fehler status Wert festgelegt. |
CompletionContext | Kontextinformationen, die in der Filterrückrufroutine festgelegt wurden. Dies wird auf NULL festgelegt, wenn keine Informationen übergeben werden oder wenn keine entsprechende Filterrückrufroutine vorhanden ist. |
Rückrufroutinen werden für die folgenden Vorgänge definiert:
Vorgang | Benachrichtigungsrückrufroutinen |
---|---|
Der Speicher-Manager ruft eine Datei ausschließlich ab, bevor ein Abschnitt mit Speicherzuordnung für einen Teil der Datei erstellt wird. Für diesen Vorgang ist SyncType auf SyncTypeCreateSection festgelegt. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization |
Der Speicher-Manager gibt eine Datei frei, nachdem ein Abschnitt mit Speicherzuordnung für einen Teil der Datei erstellt wurde. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
Eine Kernelkomponente (z. B. der Cache-Manager) ruft eine Datei ausschließlich ab, bevor die Abschnittserstellung für einen Teil der Datei vorübergehend deaktiviert wird. Für diesen Vorgang ist SyncType auf SyncTypeOther festgelegt. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization sollte immer einen erfolgreichen status Code (z. B. STATUS_SUCCESS) für diesen Vorgang zurückgeben. |
Eine Kernelkomponente (z. B. der Cache-Manager) gibt eine Datei frei, nachdem die Abschnittserstellung für einen Teil der Datei vorübergehend deaktiviert wurde. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
Der Cache-Manager ruft eine Datei ausschließlich ab, bevor ein Teil der Datei aus dem Cache geleert wird. | PreAcquireForCcFlush, PostAcquireForCcFlush |
Der Cache-Manager gibt eine Datei frei, nachdem ein Teil der Datei aus dem Cache geleert wurde. | PreReleaseForCcFlush, PostReleaseForCcFlush |
Der geänderte Seitenschreiber ruft eine Datei ausschließlich ab, bevor ein Teil der Datei auf den Datenträger geschrieben wird. | PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter |
Der geänderte Seitenschreiber gibt eine Datei frei, nachdem ein Teil der Datei auf den Datenträger geschrieben wurde. | PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter |
Eine Komponente fragt Dateiinformationen anhand des Namens ab, ohne die Datei zu öffnen. Umleitungen werden mit dieser Abfrage nie aufgerufen und müssen daher keine Rückrufe für PreQueryOpen oder PostQueryOpen implementieren. | PreQueryOpen, PostQueryOpen |
Die Rückrufroutine für Filterbenachrichtigungen wird aufgerufen, bevor die Vorgangsanforderung an Filtertreiber auf niedrigerer Ebene und das zugrunde liegende Dateisystem übergeben wird. In der Rückrufroutine sollte der Filtertreiber alle erforderlichen Verarbeitungsschritte ausführen und sofort STATUS_SUCCESS zurückgeben. Wenn die Rückrufroutine eines Filtertreibers einen anderen status Wert als STATUS_SUCCESS zurückgibt, führt dies dazu, dass die Vorgangsanforderung fehlschlägt. Wiederholter Fehler bestimmter Anforderungen, z. B. Sperren von Anforderungen, kann den Systemstatus anhalten. Daher sollten Filtertreiber eine solche Anforderung nur dann fehlschlagen, wenn dies unbedingt erforderlich ist. Wenn diese Anforderungen fehlschlagen, sollte der Filtertreiber einen Fehler status Wert zurückgeben, der den Fehler so vollständig und genau wie möglich beschreibt.
Hinweis
Die Benachrichtigungsrückrufroutine eines Filtertreibers kann bei einer Anforderung zum Freigeben einer Dateisystemressource nicht fehlschlagen. Wenn ein Filtertreiber einen anderen status wert als STATUS_SUCCESS aus einer der folgenden Benachrichtigungsrückrufroutinen zurückgibt, wird der wert status ignoriert.
- PreReleaseForSectionSynchronization
- PreReleaseForCcFlush
- PreReleaseForModifiedPageWriter
Die Rückrufroutine zur Filtervervollständigung wird aufgerufen, nachdem die Vorgangsanforderung an Filtertreiber auf niedrigerer Ebene und das zugrunde liegende Dateisystem übergeben wurde. In der Rückrufroutine für den Abschluss muss der Filtertreiber alle erforderlichen Verarbeitungsschritte ausführen und sofort zurückgeben.
Anforderungen
Anforderung | Wert |
---|---|
Header | ntifs.h |