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