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


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

Структура FLT_IO_PARAMETER_BLOCK содержит параметры для операции ввода-вывода, представленные структурой данных FLT_CALLBACK_DATA обратного вызова.

Синтаксис

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

Члены

IrpFlags

Битовая маска флагов, определяющих различные аспекты операции ввода-вывода. Эти флаги используются только для операций на основе IRP. В следующей таблице показаны значения флагов.

Значение Значение
IRP_BUFFERED_IO Операция является буферизованной операцией ввода-вывода.
IRP_CLOSE_OPERATION Операция является операцией очистки или закрытия.
IRP_DEALLOCATE_BUFFER Диспетчер ввода-вывода освободит буфер на этапе завершения для IRP.
IRP_INPUT_OPERATION Операция является операцией ввода.
IRP_NOCACHE Операция является операцией ввода-вывода без кэширования.
IRP_PAGING_IO Операция является операцией ввода-вывода подкачки.
IRP_SYNCHRONOUS_API Операция ввода-вывода является синхронной.
IRP_SYNCHRONOUS_PAGING_IO Операция представляет собой синхронную операцию ввода-вывода подкачки.
IRP_MOUNT_COMPLETION Для операции завершается подключение тома.
IRP_CREATE_OPERATION Операция является операцией создания или открытия.
IRP_READ_OPERATION Операция ввода-вывода предназначена для чтения.
IRP_WRITE_OPERATION Операция ввода-вывода предназначена для записи.
IRP_DEFER_IO_COMPLETION Выполнение операции ввода-вывода откладывается.
IRP_ASSOCIATED_IRP Операция связана с главным IRP.
IRP_OB_QUERY_NAME Операция является асинхронным запросом имени.
IRP_HOLD_DEVICE_QUEUE Зарезервировано.
IRP_UM_DRIVER_INITIATED_IO Операция была выполнена из драйвера пользовательского режима.

MajorFunction

Код основной функции для операции ввода-вывода. Основные коды функций используются для операций на основе IRP, быстрых операций ввода-вывода и операций обратного вызова файловой системы (FSFilter). Дополнительные сведения о дополнительных операциях см. в разделе FLT_PARAMETERS.

MinorFunction

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

OperationFlags

Битовая маска флагов, определяющих различные аспекты операции ввода-вывода. Эти флаги используются только для операций на основе IRP. Диспетчер фильтров копирует эти флаги из элемента Flagsструктуры IO_STACK_LOCATION, связанной с IRP. В следующей таблице приведены наиболее часто используемые значения флагов.

Значение Значение
SL_CASE_SENSITIVE Используется для IRP_MJ_CREATE. Если этот флаг установлен, сравнение имен файлов должно учитывать регистр.
SL_EXCLUSIVE_LOCK Используется для IRP_MJ_LOCK_CONTROL. Если этот флаг установлен, запрашивается монопольная блокировка диапазона байтов. В противном случае запрашивается общая блокировка.
SL_FAIL_IMMEDIATELY Используется для IRP_MJ_LOCK_CONTROL. Если этот флаг установлен, запрос на блокировку завершится ошибкой, если он не может быть предоставлен немедленно.
SL_FORCE_ACCESS_CHECK Используется для IRP_MJ_CREATE. Если этот флаг установлен, проверки доступа необходимо выполнять, даже если значение элемента RequestorMode IRP равно KernelMode.
SL_FORCE_DIRECT_WRITE Используется для IRP_MJ_WRITE и IOCTL_DISK_COPY_DATA. Если этот флаг установлен, драйверы режима ядра могут выполнять запись в области тома, в которые они обычно блокируют запись из-за соображений безопасности. Этот флаг проверяется как на уровне файловой системы, так и на уровне стека хранилища. Флаг SL_FORCE_DIRECT_WRITE доступен в Windows Vista и более поздних версиях Windows.
SL_INDEX_SPECIFIED Используется для IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA и IRP_MJ_SET_QUOTA. Если этот флаг установлен, проверка сведений о каталоге, квоте или расширенном атрибуте должна начинаться с записи в списке, индекс которой указан.
SL_OPEN_PAGING_FILE Используется для IRP_MJ_CREATE. Если этот флаг установлен, файл является файлом подкачки.
SL_OPEN_TARGET_DIRECTORY Используется для IRP_MJ_CREATE. Если этот флаг установлен, необходимо открыть родительский каталог файла.
SL_OVERRIDE_VERIFY_VOLUME Используется для IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READ и IRP_MJ_WRITE. Если этот флаг установлен, операция ввода-вывода должна выполняться, даже если для объекта устройства тома установлен флаг DO_VERIFY_VOLUME.
SL_RESTART_SCAN Используется для IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA и IRP_MJ_SET_QUOTA. Если этот флаг установлен, проверка сведений о каталоге, квоте или расширенном атрибуте должна начинаться с первой записи в каталоге или списке. В противном случае проверка должна быть возобновлена с предыдущей проверки.
SL_RETURN_SINGLE_ENTRY Используется для IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA и IRP_MJ_SET_QUOTA. Если этот флаг установлен, проверка сведений о каталоге, квоте или расширенном атрибуте должна возвращать только первую найденную запись.
SL_WATCH_TREE Используется для IRP_MJ_DIRECTORY_CONTROL. Если этот флаг установлен, следует также отслеживать все подкаталоги этого каталога. В противном случае будет отслеживаться только сам каталог.
SL_WRITE_THROUGH Используется для IRP_MJ_WRITE. Если этот флаг установлен, данные файла должны быть записаны в постоянное хранилище, а не просто записываться в кэш.

Reserved

Зарезервировано для системного использования. Не используйте.

TargetFileObject

Указатель файлового объекта для файла или каталога, который является целевым объектом для этой операции ввода-вывода.

TargetInstance

Указатель непрозрачного экземпляра для минифильтра, который является целевым объектом для этой операции ввода-вывода.

Parameters

Структура FLT_PARAMETERS , содержащая параметры операции ввода-вывода, заданные членами MajorFunction и MinorFunction .

Комментарии

Структура FLT_IO_PARAMETER_BLOCK содержит параметры для операции ввода-вывода, представленной структурой данных обратного вызова (FLT_CALLBACK_DATA). Структура данных обратного вызова содержит указатель на структуру FLT_IO_PARAMETER_BLOCK в элементе Iopb .

Минифильтр получает указатель на структуру данных обратного вызова в качестве входного параметра Data или CallbackData для следующих типов подпрограмм обратного вызова:

Подпрограммы обратного вызова минифильтра перед операцией и после операции могут изменять содержимое структуры FLT_IO_PARAMETER_BLOCK для операции ввода-вывода, за исключением элементов MajorFunction и Reserved . Если это так, он должен вызвать FltSetCallbackDataDirty, если только он не изменил элемент IoStatus структуры данных обратного вызова для операции. В противном случае измененные значения игнорируются.

Когда диспетчер фильтров выполняет обратный вызов мини-фильтра перед операцией или после операции, fltObject-FileObject> и TargetFileObject (CallbackData-Iopb-TargetFileObject>>) изначально совпадают. Если минифильтр изменяет TargetFileObject или TargetInstance, его последующий вызов FltSetCallbackDataDirty из обратного вызова перед операцией приведет к тому, что диспетчер фильтров заменит FltObjects-FileObject> и FltObjects-Instance> перед отправкой операции в более низкие фильтры.

Если подпрограмма обратного вызова минифильтра перед операцией изменяет параметры операции ввода-вывода, все минифильтры под ним в стеке экземпляров минифильтра будут получать измененные параметры в подпрограммах обратного вызова перед операцией и после операции.

Измененные параметры не получаются собственной подпрограммой обратного вызова после операции минифильтра или любыми минифильтрами выше этого минифильтра в стеке экземпляров минифильтра. Во всех случаях подпрограммы обратного вызова минифильтра до операции и после операции получают одинаковые значения входных параметров.

Если мини-фильтр изменяет значение элемента TargetInstance , новое значение должно быть указателем на экземпляр того же минифильтра на той же высоте на другом томе. Кроме того, объект устройства нового тома должен иметь размер стека, который больше или равен размеру объекта устройства исходного тома.

Чтобы получить размер стека для объекта устройства тома с указанием непрозрачного указателя экземпляра для экземпляра, подключенного к тому, выполните следующие действия.

  • Вызовите Метод FltGetVolumeFromInstance , чтобы получить указатель тома.
  • Вызовите Метод FltGetDeviceObject , чтобы получить указатель на объект устройства тома. Этот указатель возвращается в параметре DeviceObject . Размер стека объекта устройства можно найти в разделе DeviceObject-StackSize>.
  • Если указатель тома больше не нужен, вызовите FltObjectDereference для уменьшения числа ссылок.
  • Если указатель объекта устройства тома больше не нужен, вызовите ObDereferenceObject для уменьшения числа ссылок.

Мини-фильтр может изменять значение элемента TargetFileObject . Однако новое значение должно быть указателем на объект файла для файла, который находится в том же томе, что и экземпляр, указанный элементом TargetInstance .

Мини-фильтр не может безопасно изменить значение элемента MajorFunction . Вместо этого он должен инициировать новую операцию ввода-вывода.

Мини-фильтр может инициировать операцию ввода-вывода, вызвав подпрограмму поддержки , например FltReadFile , или метод FltAllocateCallbackData для выделения структуры данных обратного вызова. инициализация параметров ввода-вывода в структуре FLT_IO_PARAMETER_BLOCK и передача структуры данных обратного вызова в FltPerformSynchronousIo или FltPerformAsynchronousIo.

Примечание

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

Требования

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

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

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

FLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK