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 打开的文件对象执行也是如此。

  • 如果上述条件均不成立,则操作为异步操作。

注意

如果回调数据结构表示IRP_MJ_DEVICE_CONTROL、IRP_MJ_INTERNAL_DEVICE_CONTROL或IRP_MJ_FILE_SYSTEM_CONTROL操作,并且 i/O 控制代码 (IOCTL) 或文件系统控制代码 (使用 METHOD_BUFFERED 定义的 FSCTL) ,则 FltIsOperationSynchronous 也会返回 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)
Library FltMgr.lib
DLL Fltmgr.sys
IRQL 任何级别

另请参阅

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

IoIsOperationSynchronous