FLT_CALLBACK_DATA Struktur (fltkernel.h)

Die FLT_CALLBACK_DATA-Struktur stellt einen E/A-Vorgang dar. Der Filter-Manager und Minifilter verwenden diese Struktur, um E/A-Vorgänge zu initiieren und zu verarbeiten.

Syntax

typedef struct _FLT_CALLBACK_DATA {
  FLT_CALLBACK_DATA_FLAGS     Flags;
  PETHREAD                    Thread;
  PFLT_IO_PARAMETER_BLOCK     Iopb;
  IO_STATUS_BLOCK             IoStatus;
  struct _FLT_TAG_DATA_BUFFER *TagData;
  union {
    struct {
      LIST_ENTRY QueueLinks;
      PVOID      QueueContext[2];
    };
    PVOID FilterContext[4];
  };
  KPROCESSOR_MODE             RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;

Member

Flags

Bitmaske von Flags, die den E/A-Vorgang beschreiben.

Minifilter können das folgende Flag festlegen.

Flag Bedeutung
FLTFL_CALLBACK_DATA_DIRTY Ein Minifilter legt dieses Flag (durch Aufrufen von FltSetCallbackDataDirty) fest, um anzugeben, dass der Inhalt der Rückrufdatenstruktur geändert wurde. (Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".)

Hinweis

Nur der Filter-Manager kann die folgenden Flags festlegen.

Wenn der Filter-Manager die Rückrufdatenstruktur initialisiert, legt er eines der folgenden Flags fest, um den Typ des E/A-Vorgangs anzugeben, den die Rückrufdatenstruktur darstellt.

Flag Bedeutung
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION Die Rückrufdatenstruktur stellt einen schnellen E/A-Vorgang dar.
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION Die Rückrufdatenstruktur stellt einen Rückrufvorgang des Dateisystemminifilters dar.
FLTFL_CALLBACK_DATA_IRP_OPERATION Die Rückrufdatenstruktur stellt einen auf E/A-Anforderungspaket (IRP) basierenden Vorgang dar.

Hinweis

Nur der Filter-Manager kann die folgenden Flags festlegen.

Wenn der Filter-Manager die Rückrufdatenstruktur initialisiert, kann er auch die folgenden Flags festlegen.

Flag Bedeutung
FLTFL_CALLBACK_DATA_GENERATED_IO Die Rückrufdatenstruktur stellt einen E/A-Vorgang dar, der von einem Minifilter generiert wurde. Dieses Flag ist nur für IRP-basierte Vorgänge gültig.
FLTFL_CALLBACK_DATA_REISSUED_IO Die Rückrufdatenstruktur stellt einen E/A-Vorgang dar, der von einem Minifilter erneut ausgegeben wird. (Um einen E/A-Vorgang erneut auszuführen, ruft ein Minifilter FltReissueSynchronousIo auf.) Dieses Flag ist nur für IRP-basierte Vorgänge gültig.
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER Der Puffer für den E/A-Vorgang wurde aus einem nicht ausgestellten Pool zugewiesen. Dieses Flag kann für jeden Typ von E/A-Vorgängen festgelegt werden. Minifilter dürfen dieses Flag nie festlegen.

Hinweis

Nur der Filter-Manager kann die folgenden Flags festlegen.

Wenn der Filter-Manager die Abschlussverarbeitung für den E/A-Vorgang ausführt, den die Rückrufdatenstruktur darstellt, legt er eines oder beide der folgenden Flags fest.

Flag Bedeutung
FLTFL_CALLBACK_DATA_DRAINING_IO Der Filter-Manager legt dieses Flag fest, um anzugeben, dass er derzeit den Abschlussknoten für den E/A-Vorgang leert. Dieses Flag ist nur während der E/A-Vervollständigung gültig.
FLTFL_CALLBACK_DATA_POST_OPERATION Der Filter-Manager legt dieses Flag fest, um anzugeben, dass er derzeit registrierte Rückrufroutinen nach dem Vorgang (PFLT_POST_OPERATION_CALLBACK) für den Vorgang aufruft. Dieses Flag ist nur während der E/A-Vervollständigung gültig.

Thread

Zeiger auf den Thread, der den E/A-Vorgang initiiert hat. Dieses Feld kann NULL sein.

Iopb

Zeiger auf eine FLT_IO_PARAMETER_BLOCK-Struktur , die die Parameter für den E/A-Vorgang enthält.

IoStatus

Eine IO_STATUS_BLOCK-Struktur, die status und Informationen für den E/A-Vorgang enthält. Ein Minifilter kann den Inhalt dieser Struktur nur in einer PFLT_PRE_OPERATION_CALLBACK-Routine (Pre-Operation Callback) ändern, von der aus FLT_PREOP_COMPLETE zurückgegeben werden soll, oder in einer Rückrufroutine nach dem Vorgang (PFLT_POST_OPERATION_CALLBACK), aus der FLT_POSTOP_FINISHED_PROCESSING zurückgegeben werden soll. Andernfalls werden die Inhalte dieser Struktur normalerweise vom Filter-Manager festgelegt.

TagData

Zeiger auf eine FLT_TAG_DATA_BUFFER-Struktur , die Analysepunktdaten für den E/A-Vorgang enthält. Dieser Zeiger ist nur im Post-Create-Pfad gültig. Daher kann nur die Rückrufroutine eines Minifilters nach dem Vorgang den Wert dieses Elements ändern. Die Rückrufroutine eines Minifilters nach der Erstellung kann diesen Member so ändern, dass er auf eine andere FLT_TAG_DATA_BUFFER-Struktur verweist. Wenn der Member jedoch so geändert wird, dass er auf eine andere Struktur verweist, muss er zuerst ExFreePool aufrufen, um die vorhandene Struktur freizugeben, um einen Poolspeicherverlust zu verhindern.

QueueLinks

Warteschlangenlinks, die ein Minifilter verwenden kann, wenn die Rückrufdatenwarteschlange des Filter-Managers zum Stiften des E/A-Vorgangs verwendet wird.

QueueContext[2]

Array von Kontextinformationszeigern, die ein Minifilter verwenden kann, wenn die Warteschlange des Filter-Managers zum Stiften des E/A-Vorgangs verwendet wird.

FilterContext[4]

Array von Kontextinformationszeigern, die ein Minifilter verwenden kann, wenn eine andere Warteschlange als die Warteschlange des Filter-Managers zum Stiften des E/A-Vorgangs verwendet wird.

RequestorMode

Gibt den Ausführungsmodus des Prozesses an, der den E/A-Vorgang initiiert hat, entweder KernelMode oder UserMode.

Hinweise

Ein Minifilter registriert Rückrufroutinen vor dem Betrieb (PFLT_PRE_OPERATION_CALLBACK) und Nachbetrieb (PFLT_POST_OPERATION_CALLBACK) für einen oder mehrere E/A-Vorgänge. Wenn der Filter-Manager eine dieser Rückrufroutinen aufruft, übergibt er eine Rückrufdatenstruktur (FLT_CALLBACK_DATA) als ersten Parameter. Diese Struktur stellt den E/A-Vorgang dar.

Die Rückrufroutine eines Minifilters vor oder nach dem Vorgang kann den Inhalt der Rückrufdatenstruktur ändern, mit Ausnahme der Thread - und RequestorMode-Member . Wenn dies der Fall ist, muss fltSetCallbackDataDirty aufgerufen werden, es sei denn, es wurde auch der Inhalt des IoStatus-Members geändert. Andernfalls werden die geänderten Werte ignoriert.

Ein Minifilter kann einen E/A-Vorgang initiieren, indem er eine Supportroutine wie FltReadFile aufruft oder FltAllocateCallbackData aufruft , um eine Rückrufdatenstruktur zuzuweisen. Initialisieren der E/A-Parameter der Struktur und Übergeben der Struktur an FltPerformSynchronousIo oder FltPerformAsynchronousIo.

Ein Minifilter-initiierter E/A-Vorgang wird nur an die Minifilterinstanzen gesendet, die unterhalb des aufrufenden instance angefügt sind, und an das Dateisystem. Minifilter, die über dem angegebenen instance angefügt sind, empfangen den E/A-Vorgang nicht.

Minifilter können nur IRP-basierte E/A-Vorgänge initiieren. Sie können keine schnellen E/A- oder FSFilter-Rückrufvorgänge (File System Filter) initiieren.

Anforderungen

Anforderung Wert
Header fltkernel.h (include Fltkernel.h)

Weitere Informationen

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FLT_TAG_DATA_BUFFER

FltAllocateCallbackData

FltFreeCallbackData

FltPerformAsynchronio

FltPerformSynchronousIo

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

IRP

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK