Freigeben über


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;

Angehörige

Flags

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

Minifilter können das folgende Kennzeichen festlegen.

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

Anmerkung

Nur der Filter-Manager kann die folgenden Flags festlegen.

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

Flagge 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 Dateisystem-Minifilterrückrufvorgang dar.
FLTFL_CALLBACK_DATA_IRP_OPERATION Die Rückrufdatenstruktur stellt einen I/O-Anforderungspaket (IRP)-basierten Vorgang dar.

Anmerkung

Nur der Filter-Manager kann die folgenden Flags festlegen.

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

Flagge 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 eine E/A-Operation erneut aufzuerlegen, ruft ein Minifilter FltReissueSynchronousIo.) 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 ausgelagerten Pool zugewiesen. Dieses Kennzeichen kann für jeden Typ von E/A-Vorgängen festgelegt werden. Minifilter dürfen diese Kennzeichnung niemals festlegen.

Anmerkung

Nur der Filter-Manager kann die folgenden Flags festlegen.

Wenn der Filter-Manager die Vervollständigungsverarbeitung für den E/A-Vorgang durchführt, den die Rückrufdatenstruktur darstellt, legt er ein oder beide der folgenden Flags fest.

Flagge Bedeutung
FLTFL_CALLBACK_DATA_DRAINING_IO Der Filter-Manager legt dieses Kennzeichen fest, um anzugeben, dass er den Abschlussknoten für den E/A-Vorgang zurzeit entleert. Dieses Kennzeichen ist nur während der E/A-Fertigstellung gültig.
FLTFL_CALLBACK_DATA_POST_OPERATION Der Filter-Manager legt dieses Flag fest, um anzugeben, dass er derzeit registrierte Post-Operation-Rückrufroutinen (PFLT_POST_OPERATION_CALLBACK) für den Vorgang aufruft. Dieses Kennzeichen ist nur während der E/A-Fertigstellung gültig.

Thread

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

Iopb

Zeigen Sie 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 Voroperationsrückrufroutine (PFLT_PRE_OPERATION_CALLBACK) ändern, von der aus es darum geht, FLT_PREOP_COMPLETE oder in einer Postoperationsrückrufroutine (PFLT_POST_OPERATION_CALLBACK) zurückzugeben, von der aus 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 den Wert dieses Elements ändern. Die Rückrufroutine eines Minifilters kann dieses Element so ändern, dass er auf eine andere FLT_TAG_DATA_BUFFER Struktur verweist. Wenn das Element jedoch so geändert wird, dass es auf eine andere Struktur verweist, muss er zuerst ExFreePool- aufrufen, um die vorhandene Struktur freizugeben, um einen Speicherverlust im Pool 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-.

Bemerkungen

Ein Minifilter registriert Voroperationen (PFLT_PRE_OPERATION_CALLBACK) und Post-Operation (PFLT_POST_OPERATION_CALLBACK) Rückrufroutinen für einen oder mehrere Arten von E/A-Vorgängen. 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 Vor- oder Nach-Operation-Rückrufroutine eines Minifilters kann den Inhalt der Rückrufdatenstruktur ändern, mit Ausnahme der Thread- und RequestorMode Member. Wenn dies der Fall ist, muss sie FltSetCallbackDataDirtyaufrufen, es sei denn, sie hat auch den Inhalt des IoStatus Mitglieds geändert. Andernfalls werden die geänderten Werte ignoriert.

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

Ein vom Minifilter initiierter E/A-Vorgang wird nur an die minifilterinstanzen gesendet, die unterhalb der aufrufenden Instanz und an das Dateisystem angefügt sind. Über der angegebenen Instanz angefügte Minifilter empfangen nicht den E/A-Vorgang.

Minifilter können nur IRP-basierte E/A-Vorgänge initiieren. Sie können keine schnellen E/A- oder Dateisystemfiltervorgänge (FSFilter) initiieren.

Anforderungen

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

Siehe auch

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-

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltReadFile-

FltReissueSynchronousIo

FltReuseCallbackData-

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

IRP-

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK