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) |