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 | 任何级别 |