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 FltIsOperationSynchronous routine determines whether a given callback data structure (FLT_CALLBACK_DATA) represents a synchronous or asynchronous I/O operation.
Syntax
BOOLEAN FLTAPI FltIsOperationSynchronous(
[in] PFLT_CALLBACK_DATA CallbackData
);
Parameters
[in] CallbackData
Pointer to the callback data structure for the operation (FLT_CALLBACK_DATA).
Return value
FltIsOperationSynchronous returns TRUE if the operation is synchronous, and FALSE if the operation is asynchronous.
Remarks
FltIsOperationSynchronous determines whether a given callback data structure (FLT_CALLBACK_DATA) represents a synchronous or asynchronous I/O operation, according to the following conditions:
If the operation is not an IRP-based I/O operation, the operation is synchronous. To determine whether an operation is IRP-based, use the FLT_IS_IRP_OPERATION macro.
If the operation is an asynchronous paging I/O operation, the operation is asynchronous, even if one of the other conditions in this list is true.
If the operation is a synchronous paging I/O operation, the operation is synchronous.
If the file object for the operation was opened for synchronous I/O, the operation is synchronous.
If the IRP_SYNCHRONOUS_API flag is set in the IRP for the operation, the operation is synchronous. This flag is set for operations, such as IRP_MJ_QUERY_INFORMATION and IRP_MJ_SET_INFORMATION, that are always synchronous, even when performed on a file object that was opened for asynchronous I/O.
If none of the above conditions is true, the operation is asynchronous.
Note
FltIsOperationSynchronous also returns TRUE if the callback data structure represents an IRP_MJ_DEVICE_CONTROL, IRP_MJ_INTERNAL_DEVICE_CONTROL, or IRP_MJ_FILE_SYSTEM_CONTROL operation with an I/O control code (IOCTL) or file system control code (FSCTL) that was defined with METHOD_BUFFERED, even if the file object was opened for asynchronous I/O. Such a request is likely to be made synchronous by the file system, but this is not necessarily true in all cases.
When FltIsOperationSynchronous returns TRUE, this does not indicate that the I/O operation is synchronized. That is, the TRUE value does not indicate that a minifilter driver returned FLT_PREOP_SYNCHRONIZE in the preoperation callback (PFLT_POST_OPERATION_CALLBACK) routine for this operation. Instead, FltIsOperationSynchronous returns TRUE to indicate that the I/O operation is synchronous from the I/O manager's perspective.
FltIsOperationSynchronous can be called for all classes of operations: fast I/O, file system filter (FSFilter) callbacks, and IRP-based operations.
Requirements
Requirement | Value |
---|---|
Target Platform | Universal |
Header | fltkernel.h (include Fltkernel.h) |
Library | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | Any level |