Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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) |