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