FLT_PARAMETERS union (fltkernel.h)
The FLT_PARAMETERS union defines, for a minifilter, the request-type-specific parameters associated with an I/O operation. The Members section on this reference page lists the members without providing descriptions. Jump directly to Remarks for pointers to the actual structure descriptions.
Syntax
typedef union _FLT_PARAMETERS {
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT FileAttributes;
USHORT ShareAccess;
ULONG POINTER_ALIGNMENT EaLength;
PVOID EaBuffer;
LARGE_INTEGER AllocationSize;
} Create;
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT Reserved;
USHORT ShareAccess;
PVOID Parameters;
} CreatePipe;
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT Reserved;
USHORT ShareAccess;
PVOID Parameters;
} CreateMailslot;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT Key;
LARGE_INTEGER ByteOffset;
PVOID ReadBuffer;
PMDL MdlAddress;
} Read;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT Key;
LARGE_INTEGER ByteOffset;
PVOID WriteBuffer;
PMDL MdlAddress;
} Write;
struct {
ULONG Length;
FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
PVOID InfoBuffer;
} QueryFileInformation;
struct {
ULONG Length;
FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
PFILE_OBJECT ParentOfTarget;
union {
struct {
BOOLEAN ReplaceIfExists;
BOOLEAN AdvanceOnly;
};
ULONG ClusterCount;
HANDLE DeleteHandle;
};
PVOID InfoBuffer;
} SetFileInformation;
struct {
ULONG Length;
PVOID EaList;
ULONG EaListLength;
ULONG POINTER_ALIGNMENT EaIndex;
PVOID EaBuffer;
PMDL MdlAddress;
} QueryEa;
struct {
ULONG Length;
PVOID EaBuffer;
PMDL MdlAddress;
} SetEa;
struct {
ULONG Length;
FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
PVOID VolumeBuffer;
} QueryVolumeInformation;
struct {
ULONG Length;
FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
PVOID VolumeBuffer;
} SetVolumeInformation;
union {
struct {
ULONG Length;
PUNICODE_STRING FileName;
FILE_INFORMATION_CLASS FileInformationClass;
ULONG POINTER_ALIGNMENT FileIndex;
PVOID DirectoryBuffer;
PMDL MdlAddress;
} QueryDirectory;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT CompletionFilter;
ULONG POINTER_ALIGNMENT Spare1;
ULONG POINTER_ALIGNMENT Spare2;
PVOID DirectoryBuffer;
PMDL MdlAddress;
} NotifyDirectory;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT CompletionFilter;
DIRECTORY_NOTIFY_INFORMATION_CLASS POINTER_ALIGNMENT DirectoryNotifyInformationClass;
ULONG POINTER_ALIGNMENT Spare2;
PVOID DirectoryBuffer;
PMDL MdlAddress;
} NotifyDirectoryEx;
} DirectoryControl;
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;
union {
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
} FastIo;
} DeviceIoControl;
struct {
PLARGE_INTEGER Length;
ULONG POINTER_ALIGNMENT Key;
LARGE_INTEGER ByteOffset;
PEPROCESS ProcessId;
BOOLEAN FailImmediately;
BOOLEAN ExclusiveLock;
} LockControl;
struct {
SECURITY_INFORMATION SecurityInformation;
ULONG POINTER_ALIGNMENT Length;
PVOID SecurityBuffer;
PMDL MdlAddress;
} QuerySecurity;
struct {
SECURITY_INFORMATION SecurityInformation;
PSECURITY_DESCRIPTOR SecurityDescriptor;
} SetSecurity;
struct {
ULONG_PTR ProviderId;
PVOID DataPath;
ULONG BufferSize;
PVOID Buffer;
} WMI;
struct {
ULONG Length;
PSID StartSid;
PFILE_GET_QUOTA_INFORMATION SidList;
ULONG SidListLength;
PVOID QuotaBuffer;
PMDL MdlAddress;
} QueryQuota;
struct {
ULONG Length;
PVOID QuotaBuffer;
PMDL MdlAddress;
} SetQuota;
union {
struct {
PCM_RESOURCE_LIST AllocatedResources;
PCM_RESOURCE_LIST AllocatedResourcesTranslated;
} StartDevice;
struct {
DEVICE_RELATION_TYPE Type;
} QueryDeviceRelations;
struct {
const GUID *InterfaceType;
USHORT Size;
USHORT Version;
PINTERFACE Interface;
PVOID InterfaceSpecificData;
} QueryInterface;
struct {
PDEVICE_CAPABILITIES Capabilities;
} DeviceCapabilities;
struct {
PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
} FilterResourceRequirements;
struct {
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG POINTER_ALIGNMENT Length;
} ReadWriteConfig;
struct {
BOOLEAN Lock;
} SetLock;
struct {
BUS_QUERY_ID_TYPE IdType;
} QueryId;
struct {
DEVICE_TEXT_TYPE DeviceTextType;
LCID POINTER_ALIGNMENT LocaleId;
} QueryDeviceText;
struct {
BOOLEAN InPath;
BOOLEAN Reserved[3];
DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
} UsageNotification;
} Pnp;
struct {
FS_FILTER_SECTION_SYNC_TYPE SyncType;
ULONG PageProtection;
PFS_FILTER_SECTION_SYNC_OUTPUT OutputInformation;
ULONG Flags;
ULONG AllocationAttributes;
} AcquireForSectionSynchronization;
struct {
PLARGE_INTEGER EndingOffset;
PERESOURCE *ResourceToRelease;
} AcquireForModifiedPageWriter;
struct {
PERESOURCE ResourceToRelease;
} ReleaseForModifiedPageWriter;
struct {
PIRP Irp;
PVOID FileInformation;
PULONG Length;
FILE_INFORMATION_CLASS FileInformationClass;
} QueryOpen;
struct {
LARGE_INTEGER FileOffset;
ULONG Length;
ULONG POINTER_ALIGNMENT LockKey;
BOOLEAN POINTER_ALIGNMENT CheckForReadOperation;
} FastIoCheckIfPossible;
struct {
PIRP Irp;
PFILE_NETWORK_OPEN_INFORMATION NetworkInformation;
} NetworkQueryOpen;
struct {
LARGE_INTEGER FileOffset;
ULONG POINTER_ALIGNMENT Length;
ULONG POINTER_ALIGNMENT Key;
PMDL *MdlChain;
} MdlRead;
struct {
PMDL MdlChain;
} MdlReadComplete;
struct {
LARGE_INTEGER FileOffset;
ULONG POINTER_ALIGNMENT Length;
ULONG POINTER_ALIGNMENT Key;
PMDL *MdlChain;
} PrepareMdlWrite;
struct {
LARGE_INTEGER FileOffset;
PMDL MdlChain;
} MdlWriteComplete;
struct {
ULONG DeviceType;
} MountVolume;
struct {
PVOID Argument1;
PVOID Argument2;
PVOID Argument3;
PVOID Argument4;
PVOID Argument5;
LARGE_INTEGER Argument6;
} Others;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Members
Create
Create.SecurityContext
Create.Options
Create.FileAttributes
Create.ShareAccess
Create.EaLength
Create.EaBuffer
Create.AllocationSize
CreatePipe
CreatePipe.SecurityContext
CreatePipe.Options
CreatePipe.Reserved
CreatePipe.ShareAccess
CreatePipe.Parameters
CreateMailslot
CreateMailslot.SecurityContext
CreateMailslot.Options
CreateMailslot.Reserved
CreateMailslot.ShareAccess
CreateMailslot.Parameters
Read
Read.Length
Read.Key
Read.ByteOffset
Read.ReadBuffer
Read.MdlAddress
Write
Write.Length
Write.Key
Write.ByteOffset
Write.WriteBuffer
Write.MdlAddress
QueryFileInformation
QueryFileInformation.Length
QueryFileInformation.FileInformationClass
QueryFileInformation.InfoBuffer
SetFileInformation
SetFileInformation.Length
SetFileInformation.FileInformationClass
SetFileInformation.ParentOfTarget
SetFileInformation.ReplaceIfExists
SetFileInformation.AdvanceOnly
SetFileInformation.ClusterCount
SetFileInformation.DeleteHandle
SetFileInformation.InfoBuffer
QueryEa
QueryEa.Length
QueryEa.EaList
QueryEa.EaListLength
QueryEa.EaIndex
QueryEa.EaBuffer
QueryEa.MdlAddress
SetEa
SetEa.Length
SetEa.EaBuffer
SetEa.MdlAddress
QueryVolumeInformation
QueryVolumeInformation.Length
QueryVolumeInformation.FsInformationClass
QueryVolumeInformation.VolumeBuffer
SetVolumeInformation
SetVolumeInformation.Length
SetVolumeInformation.FsInformationClass
SetVolumeInformation.VolumeBuffer
DirectoryControl
DirectoryControl.QueryDirectory
DirectoryControl.QueryDirectory.Length
DirectoryControl.QueryDirectory.FileName
DirectoryControl.QueryDirectory.FileInformationClass
DirectoryControl.QueryDirectory.FileIndex
DirectoryControl.QueryDirectory.DirectoryBuffer
DirectoryControl.QueryDirectory.MdlAddress
DirectoryControl.NotifyDirectory
DirectoryControl.NotifyDirectory.Length
DirectoryControl.NotifyDirectory.CompletionFilter
DirectoryControl.NotifyDirectory.Spare1
DirectoryControl.NotifyDirectory.Spare2
DirectoryControl.NotifyDirectory.DirectoryBuffer
DirectoryControl.NotifyDirectory.MdlAddress
DirectoryControl.NotifyDirectoryEx
DirectoryControl.NotifyDirectoryEx.Length
DirectoryControl.NotifyDirectoryEx.CompletionFilter
DirectoryControl.NotifyDirectoryEx.DirectoryNotifyInformationClass
DirectoryControl.NotifyDirectoryEx.Spare2
DirectoryControl.NotifyDirectoryEx.DirectoryBuffer
DirectoryControl.NotifyDirectoryEx.MdlAddress
FileSystemControl
FileSystemControl.VerifyVolume
FileSystemControl.VerifyVolume.Vpb
FileSystemControl.VerifyVolume.DeviceObject
FileSystemControl.Common
FileSystemControl.Common.OutputBufferLength
FileSystemControl.Common.InputBufferLength
FileSystemControl.Common.FsControlCode
FileSystemControl.Neither
FileSystemControl.Neither.OutputBufferLength
FileSystemControl.Neither.InputBufferLength
FileSystemControl.Neither.FsControlCode
FileSystemControl.Neither.InputBuffer
FileSystemControl.Neither.OutputBuffer
FileSystemControl.Neither.OutputMdlAddress
FileSystemControl.Buffered
FileSystemControl.Buffered.OutputBufferLength
FileSystemControl.Buffered.InputBufferLength
FileSystemControl.Buffered.FsControlCode
FileSystemControl.Buffered.SystemBuffer
FileSystemControl.Direct
FileSystemControl.Direct.OutputBufferLength
FileSystemControl.Direct.InputBufferLength
FileSystemControl.Direct.FsControlCode
FileSystemControl.Direct.InputSystemBuffer
FileSystemControl.Direct.OutputBuffer
FileSystemControl.Direct.OutputMdlAddress
DeviceIoControl
DeviceIoControl.Common
DeviceIoControl.Common.OutputBufferLength
DeviceIoControl.Common.InputBufferLength
DeviceIoControl.Common.IoControlCode
DeviceIoControl.Neither
DeviceIoControl.Neither.OutputBufferLength
DeviceIoControl.Neither.InputBufferLength
DeviceIoControl.Neither.IoControlCode
DeviceIoControl.Neither.InputBuffer
DeviceIoControl.Neither.OutputBuffer
DeviceIoControl.Neither.OutputMdlAddress
DeviceIoControl.Buffered
DeviceIoControl.Buffered.OutputBufferLength
DeviceIoControl.Buffered.InputBufferLength
DeviceIoControl.Buffered.IoControlCode
DeviceIoControl.Buffered.SystemBuffer
DeviceIoControl.Direct
DeviceIoControl.Direct.OutputBufferLength
DeviceIoControl.Direct.InputBufferLength
DeviceIoControl.Direct.IoControlCode
DeviceIoControl.Direct.InputSystemBuffer
DeviceIoControl.Direct.OutputBuffer
DeviceIoControl.Direct.OutputMdlAddress
DeviceIoControl.FastIo
DeviceIoControl.FastIo.OutputBufferLength
DeviceIoControl.FastIo.InputBufferLength
DeviceIoControl.FastIo.IoControlCode
DeviceIoControl.FastIo.InputBuffer
DeviceIoControl.FastIo.OutputBuffer
LockControl
LockControl.Length
LockControl.Key
LockControl.ByteOffset
LockControl.ProcessId
LockControl.FailImmediately
LockControl.ExclusiveLock
QuerySecurity
QuerySecurity.SecurityInformation
QuerySecurity.Length
QuerySecurity.SecurityBuffer
QuerySecurity.MdlAddress
SetSecurity
SetSecurity.SecurityInformation
SetSecurity.SecurityDescriptor
WMI
WMI.ProviderId
WMI.DataPath
WMI.BufferSize
WMI.Buffer
QueryQuota
QueryQuota.Length
QueryQuota.StartSid
QueryQuota.SidList
QueryQuota.SidListLength
QueryQuota.QuotaBuffer
QueryQuota.MdlAddress
SetQuota
SetQuota.Length
SetQuota.QuotaBuffer
SetQuota.MdlAddress
Pnp
Pnp.StartDevice
Pnp.StartDevice.AllocatedResources
Pnp.StartDevice.AllocatedResourcesTranslated
Pnp.QueryDeviceRelations
Pnp.QueryDeviceRelations.Type
Pnp.QueryInterface
Pnp.QueryInterface.InterfaceType
Pnp.QueryInterface.Size
Pnp.QueryInterface.Version
Pnp.QueryInterface.Interface
Pnp.QueryInterface.InterfaceSpecificData
Pnp.DeviceCapabilities
Pnp.DeviceCapabilities.Capabilities
Pnp.FilterResourceRequirements
Pnp.FilterResourceRequirements.IoResourceRequirementList
Pnp.ReadWriteConfig
Pnp.ReadWriteConfig.WhichSpace
Pnp.ReadWriteConfig.Buffer
Pnp.ReadWriteConfig.Offset
Pnp.ReadWriteConfig.Length
Pnp.SetLock
Pnp.SetLock.Lock
Pnp.QueryId
Pnp.QueryId.IdType
Pnp.QueryDeviceText
Pnp.QueryDeviceText.DeviceTextType
Pnp.QueryDeviceText.LocaleId
Pnp.UsageNotification
Pnp.UsageNotification.InPath
Pnp.UsageNotification.Reserved[3]
Pnp.UsageNotification.Type
AcquireForSectionSynchronization
AcquireForSectionSynchronization.SyncType
AcquireForSectionSynchronization.PageProtection
AcquireForSectionSynchronization.OutputInformation
AcquireForSectionSynchronization.Flags
AcquireForSectionSynchronization.AllocationAttributes
AcquireForModifiedPageWriter
AcquireForModifiedPageWriter.EndingOffset
AcquireForModifiedPageWriter.ResourceToRelease
ReleaseForModifiedPageWriter
ReleaseForModifiedPageWriter.ResourceToRelease
QueryOpen
QueryOpen.Irp
QueryOpen.FileInformation
QueryOpen.Length
QueryOpen.FileInformationClass
FastIoCheckIfPossible
FastIoCheckIfPossible.FileOffset
FastIoCheckIfPossible.Length
FastIoCheckIfPossible.LockKey
FastIoCheckIfPossible.CheckForReadOperation
NetworkQueryOpen
NetworkQueryOpen.Irp
NetworkQueryOpen.NetworkInformation
MdlRead
MdlRead.FileOffset
MdlRead.Length
MdlRead.Key
MdlRead.MdlChain
MdlReadComplete
MdlReadComplete.MdlChain
PrepareMdlWrite
PrepareMdlWrite.FileOffset
PrepareMdlWrite.Length
PrepareMdlWrite.Key
PrepareMdlWrite.MdlChain
MdlWriteComplete
MdlWriteComplete.FileOffset
MdlWriteComplete.MdlChain
MountVolume
MountVolume.DeviceType
Others
Others.Argument1
Others.Argument2
Others.Argument3
Others.Argument4
Others.Argument5
Others.Argument6
Remarks
The FLT_PARAMETERS structure is stored in the Parameters field of the FLT_IO_PARAMETER_BLOCK structure for the operation. (A pointer to the FLT_IO_PARAMETER_BLOCK structure is stored in the Iopb field of the FLT_CALLBACK_DATA structure for the operation.)
The following table lists each structure member of the FLT_PARAMETERS union and then links to the page that describes that structure's members for the associated IRP. The structures are listed in the order they are defined within FLT_PARAMETERS.
The following I/O operations do not have parameters, and therefore do not have a corresponding member within the FLT_PARAMETERS structure. Minifilter drivers that register a callback routine for these I/O operations should perform any needed processing and return:
- IRP_MJ_ACQUIRE_FOR_CC_FLUSH
- IRP_MJ_CLEANUP
- IRP_MJ_CLOSE
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_RELEASE_FOR_CC_FLUSH
- IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
- IRP_MJ_SHUTDOWN
- IRP_MJ_VOLUME_DISMOUNT
Note that the terms "acquire" or "release" in some operation names, such as IRP_MJ_ACQUIRE_FOR_CC_FLUSH
and IRP_MJ_RELEASE_FOR_CC_FLUSH
, do not imply any guarantees that a minifilter will always see both operations. Just as with operations such as IRP_MJ_CREATE
and IRP_MJ_CLEANUP
, a minifilter may be prevented from observing the second operation by other factors, such as receiving an InstanceTeardownStartCallback before the second operation occurs.
Requirements
Requirement | Value |
---|---|
Header | fltkernel.h (include Fltkernel.h) |