Поделиться через


структура FLT_OPERATION_REGISTRATION (fltkernel.h)

Структура FLT_OPERATION_REGISTRATION используется для регистрации процедур обратного вызова операций.

Синтаксис

typedef struct _FLT_OPERATION_REGISTRATION {
  UCHAR                            MajorFunction;
  FLT_OPERATION_REGISTRATION_FLAGS Flags;
  PFLT_PRE_OPERATION_CALLBACK      PreOperation;
  PFLT_POST_OPERATION_CALLBACK     PostOperation;
  PVOID                            Reserved1;
} FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;

Члены

MajorFunction

Код основной функции, указывающий тип операции ввода-вывода. Этот элемент является обязательным и не может иметь значение NULL. Дополнительные сведения о дополнительных операциях см. в разделе FLT_PARAMETERS.

Flags

Битовая маска флагов, указывающая, когда следует вызывать подпрограммы обратного вызова перед операцией (PFLT_PRE_OPERATION_CALLBACK) и после операции обратного вызова (PFLT_POST_OPERATION_CALLBACK) для кэшированных операций ввода-вывода или операций ввода-вывода по страницам. Этот элемент является необязательным и может быть равен нулю.

Flag Описание
FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO (0x00000001) Минифильтр устанавливает этот флаг для операций чтения или записи, чтобы указать, что процедуры обратного вызова до и после операции не должны вызываться для операций ввода-вывода по страницам. Этот флаг применяется только к операциям ввода-вывода на основе IRP. Он игнорируется для операций ввода-вывода, которые не основаны на IRP.
FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO (0x00000002) Минифильтр устанавливает этот флаг для операций чтения или записи, чтобы указать, что процедуры обратного вызова перед операцией и после операции не должны вызываться для кэшированных операций ввода-вывода. Этот флаг применяется к быстрому вводу-выводу, а также к операции чтения и записи на основе IRP, так как все быстрые операции ввода-вывода кэшируются.
FLTFL_OPERATION_REGISTRATION_SKIP_NON_DASD_IO (0x00000004) Минифильтр устанавливает этот флаг, чтобы пропускались все операции, выполняемые с дескриптором тома, не относящееся к DASD. Обратите внимание, что обратный вызов минифильтра для этой операции будет обходить стороной.
FLTFL_OPERATION_REGISTRATION_SKIP_NON_CACHED_NON_PAGING_IO (0x00000008) Минифильтр устанавливает этот флаг таким образом, чтобы операции чтения и записи, которые не кэшировались и не разбились по страницам. Обратите внимание, что обратный вызов минифильтра для этой операции будет обходить стороной. Этот флаг относится только к IRP_MJ_READ и IRP_MJ_WRITE запросам.

PreOperation

Указатель на PFLT_PRE_OPERATION_CALLBACK типотипную подпрограмму, регистрируемую в качестве процедуры обратного вызова перед операцией перед операцией ввода-вывода для этого типа операции ввода-вывода. Этот член является необязательным и может иметь значение NULL.

PostOperation

Указатель на PFLT_POST_OPERATION_CALLBACK типизированные подпрограммы, регистрируемые как подпрограмма обратного вызова после операции после операции ввода-вывода для этого типа операции ввода-вывода. Этот член является необязательным и может иметь значение NULL.

Reserved1

Зарезервировано для системного использования. Минифильтры должны задать этому члену значение NULL.

Комментарии

Когда минифильтр вызывает FltRegisterFilter из своей процедуры DriverEntry , он может зарегистрировать подпрограмму обратного вызова перед операцией (PFLT_PRE_OPERATION_CALLBACK) и подпрограмму обратного вызова после операции (PFLT_POST_OPERATION_CALLBACK) для каждого типа операции ввода-вывода, которую он должен обрабатывать.

Чтобы зарегистрировать эти подпрограммы обратного вызова, минифильтр создает массив переменной длины FLT_OPERATION_REGISTRATION структур и сохраняет указатель на массив в элементе OperationRegistrationструктуры FLT_REGISTRATION , которую минифильтр передает в качестве параметра RegistrationfltRegisterFilter. Последним элементом этого массива должен быть {IRP_MJ_OPERATION_END}.

Минифильтр должен создать отдельную структуру FLT_OPERATION_REGISTRATION для каждого типа операций ввода-вывода, которые он обрабатывает. В этой структуре минифильтр задает точки входа своих подпрограмм обратного вызова в членах preOperation и PostOperation структуры.

Минифильтр может зарегистрировать подпрограмму обратного вызова перед операцией перед операцией ввода-вывода для определенного типа без регистрации обратного вызова после операции и наоборот.

Файловые системы не получают запросы IRP_MJ_POWER или IRP_MJ_DEVICE_CHANGE. Минифильтры не могут регистрировать процедуры обратного вызова перед операцией или после операции для этих операций.

Минифильтр не может зарегистрировать подпрограмму обратного вызова после операции для IRP_MJ_SHUTDOWN.

Для обработки нескольких типов операций ввода-вывода можно использовать одну процедуру обратного вызова перед операцией или после операции. Однако подпрограмма обратного вызова должна быть зарегистрирована отдельно для каждого типа операций ввода-вывода.

Требования

Требование Значение
Заголовок fltkernel.h (включая Fltkernel.h)

См. также раздел

FLT_REGISTRATION

FltRegisterFilter

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK