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) |