FLT_PARAMETERS for IRP_MJ_PREPARE_MDL_WRITE union

The following FLT_PARAMETERS union member is used when FLT_IO_PARAMETER_BLOCK.MajorFunction is IRP_MJ_PREPARE_MDL_WRITE.

Syntax

typedef union _FLT_PARAMETERS {
  ...    ;
  struct {
    LARGE_INTEGER           FileOffset;
    ULONG POINTER_ALIGNMENT Length;
    ULONG POINTER_ALIGNMENT Key;
    PMDL                    *MdlChain;
  } PrepareMdlWrite;
  ...    ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

Members

  • PrepareMdlWrite: Structure containing the following members.

  • FileOffset: Starting byte within the cached file.

  • Length: Length, in bytes, of the data to be written to the cached file.

  • Key: Key value associated with a byte-range lock on the target file. If the range to be written overlaps or is a subrange of an exclusively locked range within the file, this parameter must be the key for that exclusive lock,. The exclusive lock must be held by the parent process of the calling thread; otherwise, this parameter is ignored.

  • MdlChain: Pointer to a variable that receives a pointer to a chain of one or more memory descriptor lists (MDL) that describe the pages containing the data to be written.

Remarks

IRP_MJ_PREPARE_MDL_WRITE is a fast I/O operation. It does the same thing as IRP_MJ_WRITE + IRP_MN_MDL except for the following difference:

  • The IRP-based operation sets up caching on the file if it isn’t already cached before doing the MDL work.
  • The Fast IO operation fails if the file isn’t already cached.

The FLT_PARAMETERS structure for IRP_MJ_PREPARE_MDL_WRITE operations contains the parameters for a fast I/O PrepareMdlWrite operation. The operation is represented by a callback data (FLT_CALLBACK_DATA) structure. It is contained in an FLT_IO_PARAMETER_BLOCK structure, with the operation's parameters in the FLT_IO_PARAMETER_BLOCK structure that Iopb points to.

If a fast I/O IRP_MJ_PREPARE_MDL_WRITE request fails, the issuer of the I/O determines how to reissue the request. For instance, the request could be reissued as an IRP-based operation using IRP_MJ_WRITE + IRP_MN_MDL.

Requirements

Requirement type Requirement
Header Fltkernel.h (include Fltkernel.h)

See also

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS