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

Weitere Informationen

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks