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 |