Freigeben über


FS_FILTER_CALLBACKS Struktur (ntifs.h)

Die FS_FILTER_CALLBACKS-Struktur enthält die Einstiegspunkte von caller-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;

Angehörige

SizeOfFsFilterCallbacks

Größe dieser Struktur in Byte. Auf sizeof(FS_FILTER_CALLBACKS)festgelegt. SizeOfFsFilterCallbacks- darf nicht auf Null festgelegt werden.

Reserved

Reserviert. Nicht verwenden.

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.

Bemerkungen

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 Einstiegspunkte für Rückrufe sind optional und können NULL-sein.

Die FS_FILTER_CALLBACK Filterrückrufroutine und deren Parameter werden 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 wenn keine entsprechende Rückrufroutine für den Filterabschluss vorhanden ist.

Die FS_FILTER_COMPLETION_CALLBACK Filterabschlussrückrufroutine und deren Parameter werden 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- Status des Vorgangs. Wenn das Dateisystem den Vorgang erfolgreich ausgeführt hat, wird dieser Parameter auf STATUS_SUCCESS festgelegt. Andernfalls wird er auf einen geeigneten Fehlerstatuswert 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:

Operation Rückrufroutinen für Benachrichtigungen
Der Speicher-Manager erwirbt eine Datei exklusiv, bevor ein speicherzuordnunger Abschnitt für einen Teil der Datei erstellt wird. Für diesen Vorgang ist SyncType- auf SyncTypeCreateSectionfestgelegt. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization
Der Speicher-Manager gibt eine Datei nach dem Erstellen eines speicherzuordnungen Abschnitts für einen Teil der Datei frei. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
Eine Kernelkomponente (z. B. der Cache-Manager) erwirbt eine Datei exklusiv, bevor Sie die Abschnittserstellung für einen Teil der Datei vorübergehend deaktivieren. Für diesen Vorgang ist SyncType- auf SyncTypeOther festgelegt. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization sollte immer einen Erfolgsstatuscode (z. B. STATUS_SUCCESS) für diesen Vorgang zurückgeben.
Eine Kernelkomponente (z. B. der Cache-Manager) gibt eine Datei nach vorübergehender Deaktivierung der Abschnittserstellung für einen Teil der Datei frei. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
Der Cache-Manager erwirbt eine Datei exklusiv, bevor ein Teil der Datei aus dem Cache geleert wird. PreAcquireForCcFlush, PostAcquireForCcFlush
Der Cache-Manager gibt eine Datei nach dem Leeren eines Teils der Datei aus dem Cache frei. PreReleaseForCcFlush, PostReleaseForCcFlush
Der geänderte Seitenschreiber erwirbt eine Datei exklusiv, bevor ein Teil der Datei auf den Datenträger geschrieben wird. PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter
Der geänderte Seitenschreiber gibt eine Datei nach dem Schreiben eines Teils der Datei auf den Datenträger frei. PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter
Eine Komponente fragt nach Dateiinformationen anhand des Namens ab, ohne die Datei zu öffnen. Umleitungen werden nie mit dieser Abfrage aufgerufen und müssen daher keine PreQueryOpen- oder PostQueryOpen-Rückrufe 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 jede erforderliche Verarbeitung durchführen und sofort STATUS_SUCCESS zurückgeben. Wenn die Rückrufroutine eines Filtertreibers einen anderen Statuswert als STATUS_SUCCESS zurückgibt, schlägt die Vorgangsanforderung fehl. Wiederholter Fehler bestimmter Anforderungen, z. B. sperrende Anforderungen, können den Systemfortschritt anhalten. Daher sollten Filtertreiber eine solche Anforderung nur dann fehlschlagen, wenn sie unbedingt erforderlich sind. Wenn diese Anforderungen fehlschlagen, sollte der Filtertreiber einen Fehlerstatuswert zurückgeben, der den Fehler so vollständig und präzise wie möglich beschreibt.

Anmerkung

Die Rückrufroutine eines Filtertreibers kann keine Anforderung zum Freigeben einer Dateisystemressource nicht bestehen. Wenn ein Filtertreiber einen anderen Statuswert als STATUS_SUCCESS aus einer der folgenden Benachrichtigungsrückrufroutinen zurückgibt, wird der Statuswert ignoriert.

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

Die Rückrufroutine für den Filterabschluss wird aufgerufen, nachdem die Vorgangsanforderung an Filtertreiber auf niedrigerer Ebene und das zugrunde liegende Dateisystem übergeben wurde. In der Abschlussrückrufroutine muss der Filtertreiber alle erforderlichen Verarbeitungsschritte ausführen und sofort zurückgeben.

Anforderungen

Anforderung Wert
Header- ntifs.h

Siehe auch

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks