FltIsOperationSynchronous 函数 (fltkernel.h)

FltIsOperationSynchronous 例程确定给定的回调数据结构(FLT_CALLBACK_DATA)是否表示同步或异步 I/O作。

语法

BOOLEAN FLTAPI FltIsOperationSynchronous(
  [in] PFLT_CALLBACK_DATA CallbackData
);

参数

[in] CallbackData

指向作的回调数据结构的指针(FLT_CALLBACK_DATA)。

返回值

FltIsOperationSynchronous 如果作同步,则返回 TRUE;如果作是异步的,则返回 FALSE。

言论

FltIsOperationSynchronous 根据以下条件确定给定回调数据结构(FLT_CALLBACK_DATA)是否表示同步或异步 I/O作:

  • 如果作不是基于 IRP 的 I/O作,则作是同步的。 若要确定作是否基于 IRP,请使用 FLT_IS_IRP_OPERATION 宏。

  • 如果作是异步分页 I/O作,则即使此列表中的其他条件之一为 true,该作也是异步的。

  • 如果作是同步分页 I/O作,则作是同步的。

  • 如果为同步 I/O 打开了作的文件对象,则作是同步的。

  • 如果在作的 IRP 中设置了IRP_SYNCHRONOUS_API标志,则作是同步的。 此标志针对始终同步的作(如 IRP_MJ_QUERY_INFORMATION 和 IRP_MJ_SET_INFORMATION)设置,即使对为异步 I/O 打开的文件对象执行也是如此。

  • 如果上述条件都不为 true,则作是异步的。

注意

FltIsOperationSynchronous 如果回调数据结构表示使用 METHOD_BUFFERED I/O 控制代码(IOCTL)或文件系统控制代码(FSCTL)IRP_MJ_DEVICE_CONTROL、IRP_MJ_INTERNAL_DEVICE_CONTROL或IRP_MJ_FILE_SYSTEM_CONTROL作,则回调数据结构也会返回 TRUE,即使文件对象已为异步 I/O 打开也是如此。 此类请求可能是由文件系统同步发出的,但在所有情况下这并不一定如此。

FltIsOperationSynchronous 返回 TRUE 时,这并不表示 I/O作已同步。 也就是说,TRUE 值不指示在此作的预作回调(PFLT_POST_OPERATION_CALLBACK)例程中返回了小型筛选器驱动程序FLT_PREOP_SYNCHRONIZE。 相反,FltIsOperationSynchronous 返回 TRUE,以指示 I/O作从 I/O 管理器的角度来看是同步的。

可对所有作类调用 FltIsOperationSynchronous:快速 I/O、文件系统筛选器(FSFilter)回调和基于 IRP 的作。

要求

要求 价值
目标平台 普遍
标头 fltkernel.h (包括 Fltkernel.h)
FltMgr.lib
DLL Fltmgr.sys
IRQL 任何级别

另请参阅

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

IoIsOperationSynchronous