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


FLT_PARAMETERS для объединения IRP_MJ_FILE_SYSTEM_CONTROL

Компонент объединения используется, когда поле MajorFunction структуры FLT_IO_PARAMETER_BLOCK для операции IRP_MJ_FILE_SYSTEM_CONTROL.

Синтаксис

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
    } VerifyVolume;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
    } Common;
    struct {
      ULONG                    OutputBufferLength;
      ULONG POINTER_ALIGNMENT  InputBufferLength;
      ULONG POINTER_ALIGNMENT  FsControlCode;
      PVOID                    InputBuffer;
      PVOID                    OutputBuffer;
      PMDL                     OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
  } FileSystemControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

Члены

  • FileSystemControl: структура, содержащая следующие элементы.

  • VerifyVolume: компонент объединения, используемый для операций IRP_MN_VERIFY_VOLUME.

  • Vpb: указатель на блок параметров тома (VPB) для проверяемого тома.

  • DeviceObject: указатель на объект устройства для проверяемого тома.

  • Общие: компонент объединения, используемый для всех методов буферизации для операций IRP_MN_KERNEL_CALL и IRP_MN_USER_FS_REQUEST.

  • Common.OutputBufferLength: длина (в байтах) буфера, на который указывает член Noer.OutputBuffer или Direct.OutputBuffer .

  • Common.InputBufferLength: длина (в байтах) буфера, на который указывает член Неи.InputBuffer, Buffered.SystemBuffer или Direct.InputSystemBuffer .

  • Common.FsControlCode: код функции FSCTL, передаваемый в файловую систему, фильтр файловой системы или драйвер минифильтра для целевого устройства.

Подробные сведения о запросах IOCTL и FSCTL см. в разделах Использование кодов управления ввода-вывода в руководстве по архитектуре режима ядра и "Коды управления входными и выходными данными устройства" в документации по Microsoft Windows SDK. (Этот ресурс может быть недоступен для некоторых языков и стран.)

  • Ни компонент объединения, используемый для операций IRP_MN_KERNEL_CALL и IRP_MN_USER_FS_REQUEST, когда метод буферизации METHOD_NEITHER. Дополнительные сведения о методах буферизации см. в разделе Определение кодов управления вводом-выводом.

  • Noer.InputBuffer: виртуальный адрес входного буфера в пользовательском режиме, предоставленный исходной инициатором запроса операции. Диспетчер операций ввода-вывода и диспетчер фильтров не проверяют эти адреса. Чтобы обеспечить допустимость адресов пользовательского пространства, минифильтр должен использовать подпрограммы, такие как ProbeForRead, ProbeForWrite и MmProbeAndLockPages, заключая все ссылки на буфер в блоки try/кроме блоков. Дополнительные сведения см. в статье Использование не буферизованного и прямого ввода-вывода и ошибок при ссылке на адреса User-Space.

  • Noer.OutputBuffer: виртуальный адрес выходного буфера в пользовательском режиме, предоставленный исходной инициатором запроса операции. Диспетчер операций ввода-вывода и диспетчер фильтров не проверяют эти адреса. Чтобы обеспечить допустимость адресов пользовательского пространства, минифильтр должен использовать подпрограммы, такие как ProbeForRead, ProbeForWrite и MmProbeAndLockPages, заключая все ссылки на буфер в блоки try/кроме блоков. Дополнительные сведения см. в статье Использование не буферизованного и прямого ввода-вывода и ошибок при ссылке на адреса User-Space. Значение Noer.OutputBuffer является необязательным и может иметь значение NULL, если MDL предоставляется в файле Noer.OutputMdlAddress. См. Примечания.

  • Noer.OutputMdlAddress: адрес списка дескрипторов памяти (MDL), описывающего буфер, на который указывает член Neither.OutputBuffer . Этот член является необязательным и может иметь значение NULL , если буфер предоставлен в файле Noer.OutputBuffer.

  • Буферизация: компонент объединения, используемый для операций IRP_MN_KERNEL_CALL и IRP_MN_USER_FS_REQUEST, когда метод буферизации METHOD_BUFFERED. Дополнительные сведения о методах буферизации см. в разделе Определение кодов управления вводом-выводом.

  • Buffered.SystemBuffer: адрес буфера, выделенного системой для операции. В METHOD_BUFFERED ввода-вывода этот буфер используется как для входных, так и для выходных данных. Дополнительные сведения см. в разделе Методы для доступа к буферам данных.

  • Direct: компонент объединения, используемый для операций IRP_MN_KERNEL_CALL и IRP_MN_USER_FS_REQUEST, когда метод буферизации METHOD_IN_DIRECT или METHOD_OUT_DIRECT. Дополнительные сведения о методах буферизации см. в разделе Определение кодов элементов управления ввода-вывода в руководстве по архитектуре режима ядра.

  • Direct.InputSystemBuffer: адрес входного буфера для операции. Этот буфер блокируется операционной системой, чтобы к нему был безопасный доступ из режима ядра. Дополнительные сведения см. в разделе Методы для доступа к буферам данных.

  • Direct.OutputBuffer: виртуальный адрес выходного буфера в пользовательском режиме, предоставленный исходным инициатором запроса операции. В случае прямого ввода-вывода, в отличие от METHOD_NEITHER ввода-вывода, операционная система блокирует этот буфер, чтобы обеспечить безопасный доступ из режима ядра, если минифильтр находится в том же контексте процесса, что и исходный инициатор запроса операции ввода-вывода. (В противном случае необходимо вызвать MmGetSystemAddressForMdlSafe , чтобы получить системный адрес из MDL, на который указывает элемент OutputMdlAddress .) Дополнительные сведения см. в разделе Использование прямого ввода-вывода и ошибки в прямом вводе-выводе.

  • Direct.OutputMdlAddress: адрес списка дескрипторов памяти (MDL), описывающего буфер, на который указывает член Direct.OutputBuffer . Этот элемент является обязательным и не может иметь значение NULL.

Комментарии

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

Если указаны буферы Noer.OutputBuffer и Noer.MdlAddress , рекомендуется, чтобы минифильтры использовали MDL.

Если мини-фильтр изменяет значение Параметра Noer.MdlAddress, то после обратного вызова после операции диспетчер фильтров освободит MDL, хранящийся в настоящий момент в Файле Noer.MdlAddress , и восстановит предыдущее значение Параметра Ней.MdlAddress.

IRP_MJ_FILE_SYSTEM_CONTROL — это операция на основе IRP.

Требования

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

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

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile