Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Структура FLT_CALLBACK_DATA представляет операцию ввода-вывода. Диспетчер фильтров и минифильтры используют эту структуру для запуска и обработки операций ввода-вывода.
Синтаксис
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;
Члены
Flags
Битовая маска флагов, описывающая операцию ввода-вывода.
Минифильтры могут задать следующий флаг.
| Флаг | Значение |
|---|---|
| FLTFL_CALLBACK_DATA_DIRTY | Минифильтр задает этот флаг (вызывая FltSetCallbackDataDirty), чтобы указать, что он изменил содержимое структуры данных обратного вызова. (Дополнительные сведения см. в следующем разделе "Примечания".) |
Заметка
Только диспетчер фильтров может задать следующие флаги.
Когда диспетчер фильтров инициализирует структуру данных обратного вызова, он задает один из следующих флагов, чтобы указать тип операции ввода-вывода, представляющей структуру данных обратного вызова.
| Флаг | Значение |
|---|---|
| FLTFL_CALLBACK_DATA_FAST_IO_OPERATION | Структура данных обратного вызова представляет быструю операцию ввода-вывода. |
| FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION | Структура данных обратного вызова представляет собой операцию обратного вызова файловой системы. |
| FLTFL_CALLBACK_DATA_IRP_OPERATION | Структура данных обратного вызова представляет операцию на основе пакета запросов ввода-вывода (IRP). |
Заметка
Только диспетчер фильтров может задать следующие флаги.
Когда диспетчер фильтров инициализирует структуру данных обратного вызова, он также может задать следующие флаги.
| Флаг | Значение |
|---|---|
| FLTFL_CALLBACK_DATA_GENERATED_IO | Структура данных обратного вызова представляет операцию ввода-вывода, созданную мини-фильтром. Этот флаг действителен только для операций на основе IRP. |
| FLTFL_CALLBACK_DATA_REISSUED_IO | Структура данных обратного вызова представляет операцию ввода-вывода, которая переиздается мини-фильтром. (Чтобы повторно выполнить операцию ввода-вывода, мини-фильтр вызывает FltReissueSynchronousIo.) Этот флаг действителен только для операций на основе IRP. |
| FLTFL_CALLBACK_DATA_SYSTEM_BUFFER | Буфер для операции ввода-вывода был выделен из непагированного пула. Этот флаг можно задать для любой операции ввода-вывода. Минифильтры никогда не должны устанавливать этот флаг. |
Заметка
Только диспетчер фильтров может задать следующие флаги.
Когда диспетчер фильтров выполняет обработку завершения для операции ввода-вывода, представляющей структуру данных обратного вызова, он задает один или оба из следующих флагов.
| Флаг | Значение |
|---|---|
| FLTFL_CALLBACK_DATA_DRAINING_IO | Диспетчер фильтров задает этот флаг, чтобы указать, что в настоящее время выполняется очистка узла завершения для операции ввода-вывода. Этот флаг действителен только во время завершения ввода-вывода. |
| FLTFL_CALLBACK_DATA_POST_OPERATION | Диспетчер фильтров задает этот флаг, чтобы указать, что в настоящее время он вызывает зарегистрированные подпрограммы обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK) . Этот флаг действителен только во время завершения ввода-вывода. |
Thread
Указатель на поток, инициируемый операцией ввода-вывода. Это поле может иметь значение NULL.
Iopb
Указатель на структуру FLT_IO_PARAMETER_BLOCK, содержащую параметры операции ввода-вывода.
IoStatus
Структура IO_STATUS_BLOCK, содержащая состояние и сведения для операции ввода-вывода. Минифильтр может изменять содержимое этой структуры только в подпрограмме обратного вызова (PFLT_PRE_OPERATION_CALLBACK) перед операцией, из которой он будет возвращать FLT_PREOP_COMPLETE или в подпрограмме обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK) , из которого будет возвращаться FLT_POSTOP_FINISHED_PROCESSING. В противном случае содержимое этой структуры обычно устанавливается диспетчером фильтров.
TagData
Указатель на FLT_TAG_DATA_BUFFER структуру, содержащую данные точки повторного анализа для операции ввода-вывода. Этот указатель действителен только в пути после создания. Таким образом, только подпрограмма обратного вызова после операции минифильтра может изменить значение этого элемента. Подпрограмма обратного вызова после создания минифильтра может изменить этот член, указав другую FLT_TAG_DATA_BUFFER структуру. Однако если элемент изменится на другую структуру, сначала необходимо вызвать ExFreePool, чтобы освободить существующую структуру, чтобы предотвратить утечку памяти пула.
QueueLinks
Ссылки очереди, которые минифильтр может использовать, когда очередь обратных вызовов диспетчера фильтров используется для выполнения операции ввода-вывода.
QueueContext[2]
Массив указателей контекстной информации, которые минифильтр может использовать, когда очередь диспетчера фильтров используется для выполнения операции ввода-вывода.
FilterContext[4]
Массив указателей контекстной информации, которые минифильтр может использовать, если очередь, отличной от очереди диспетчера фильтров, используется для выполнения операции ввода-вывода.
RequestorMode
Указывает режим выполнения процесса, инициированного операцией ввода-вывода, либо KernelMode или UserMode.
Замечания
Мини-фильтр регистрирует предварительные операции (PFLT_PRE_OPERATION_CALLBACK) и подпрограммы обратного вызова (PFLT_POST_OPERATION_CALLBACK) для одного или нескольких типов операций ввода-вывода. Когда диспетчер фильтров вызывает одну из этих подпрограмм обратного вызова, он передает структуру обратного вызова (FLT_CALLBACK_DATA) в качестве первого параметра. Эта структура представляет операцию ввода-вывода.
Подпрограмма обратного вызова мини-фильтра может изменить содержимое структуры данных обратного вызова, за исключением элементов Thread и RequestorMode. Если это так, он должен вызывать FltSetCallbackDataDirty, если он также не изменил содержимое элемента IoStatus. В противном случае измененные значения игнорируются.
Мини-фильтр может инициировать операцию ввода-вывода, вызвав подпрограмму поддержки, например FltReadFile или вызвав FltAllocateCallbackData для выделения структуры данных обратного вызова; инициализация параметров ввода-вывода структуры и передача структуры в FltPerformSynchronousIo или FltPerformAsynchronousIo.
Операция ввода-вывода, инициированная мини-фильтром, отправляется только в экземпляры минифильтра, подключенные под вызывающим экземпляром, и в файловую систему. Минифильтры, подключенные над указанным экземпляром, не получают операции ввода-вывода.
Минифильтры могут инициировать только операции ввода-вывода на основе IRP. Они не могут инициировать быстрые операции обратного вызова ввода-вывода или файловой системы (FSFilter).
Требования
| Требование | Ценность |
|---|---|
| заголовка | fltkernel.h (include Fltkernel.h) |