Export (0) Print
Expand All
Expand Minimize

FltReissueSynchronousIo function

FltReissueSynchronousIo initiates a new synchronous I/O operation that uses the parameters from a previously synchronized I/O operation.

Syntax


VOID FltReissueSynchronousIo(
  _In_  PFLT_INSTANCE InitiatingInstance,
  _In_  PFLT_CALLBACK_DATA CallbackData
);

Parameters

InitiatingInstance [in]

An opaque instance pointer to the minifilter driver instance that is reissuing the I/O operation. Must be the same instance that initiated the previous I/O operation. This parameter is required and cannot be set to NULL.

CallbackData [in]

A pointer to the callback data (FLT_CALLBACK_DATA) structure from a previously synchronized I/O operation. This parameter is required and cannot be set to NULL.

Return value

None

Remarks

A minifilter driver calls FltReissueSynchronousIo from a postoperation callback (PFLT_POST_OPERATION_CALLBACK) routine to reissue a synchronized I/O request. It typically calls FltReissueSynchronousIo from a postoperation callback routine to reissue a failed operation with different parameters, or to handle a reparse bounce. However, it can also call FltReissueSynchronousIo to reissue I/O that the minifilter driver generated through calls to the FltAllocateCallbackData and FltPerformSynchronousIo routines. In this situation, it does not matter whether it calls FltReissueSynchronousIo in a postoperation callback routine or outside the context of an operation callback routine. For calls outside the context of a postoperation callback routine, consider using the FltReuseCallbackData and FltPerformSynchronousIo routines instead.

The caller can modify the contents of the callback data (FLT_CALLBACK_DATA) structure's I/O parameter block before reissuing the I/O request. If it does, it must call FltSetCallbackDataDirty before calling FltReissueSynchronousIo.

For example, if a minifilter driver uses reparse points, and its post-create callback routine is called for a create operation that returned STATUS_REPARSE, the minifilter driver can reissue the create operation for its own reparse points. In this case, the minifilter driver will complete the following steps:

  1. Set the FILE_OPEN_REPARSE_POINT flag in the callback data structure's I/O parameter block.

  2. Call FltSetCallbackDataDirty.

  3. Call FltReissueSynchronousIo to reissue the create request.

The Filter Manager sends the reissued I/O request only to the minifilter driver instances that are attached below the initiating instance (specified in the InitiatingInstance parameter) and to the file system. Minifilter driver instances attached above the initiating instance do not receive the reissued I/O request.

Only synchronized I/O operations can be reissued. To provide the driver with the ability to reissue, by calling FltReissueSynchronousIo in the postoperation callback routine, a minifilter driver must specifically return FLT_PREOP_SYNCHRONIZE in the preoperation callback routine.

Note   The minifilter driver does not call the FltIsOperationSynchronous routine to determine whether the preoperation callback routine for this operation returned FLT_PREOP_SYNCHRONIZE. The minifilter driver calls FltIsOperationSynchronous to determine whether the operation itself is synchronous from the I/O manager's perspective.

Only IRP-based I/O operations can be reissued. Fast I/O operations and file system filter (FSFilter) callback operations cannot be reissued. To determine whether an I/O operation is IRP-based, use the FLT_IS_IRP_OPERATION macro.

A create (IRP_MJ_CREATE) operation that has been canceled cannot be reissued. Before calling FltReissueSynchronousIo for a create operation, callers should check the Flags member of the file object for the create operation. If the FO_FILE_OPEN_CANCELLED flag is set, this means that the create operation has been canceled, and a close (IRP_MJ_CLOSE) operation will be issued for this file object. If FltReissueSynchronousIo is called for a create operation that has been canceled, the Filter Manager fails the reissued I/O request with STATUS_CANCELLED.

Note   When minifilter drivers re-issue the create in the post-create callback, they do not have to release and set the buffer that is associated with their reparse point (TagData field in CallbackData) to NULL. Instead, the Filter Manager releases and sets the buffer to NULL for them.

Requirements

Version

Available in Microsoft Windows 2000 Update Rollup 1 for SP4, Windows XP SP2, Windows Server 2003 SP1, and later operating systems. Not available in Windows 2000 SP4 and earlier operating systems.

Header

Fltkernel.h (include FltKernel.h)

Library

FltMgr.lib

IRQL

<= APC_LEVEL

See also

FLT_CALLBACK_DATA
FLT_IS_FASTIO_OPERATION
FLT_IS_FS_FILTER_OPERATION
FLT_IS_IRP_OPERATION
FLT_IS_REISSUED_IO
FLT_PARAMETERS for IRP_MJ_CREATE
FltCancelFileOpen
FltIsOperationSynchronous
FltPerformSynchronousIo
FltReuseCallbackData
FltSetCallbackDataDirty
IRP_MJ_CLOSE
IRP_MJ_CREATE
PFLT_POST_OPERATION_CALLBACK
PFLT_PRE_OPERATION_CALLBACK

 

 

Send comments about this topic to Microsoft

Show:
© 2014 Microsoft