структура 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) |