FltReissueSynchronousIo 函数 (fltkernel.h)
FltReissueSynchronousIo 启动新的同步 I/O 操作,该操作使用以前同步的 I/O 操作中的参数。
语法
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
参数
[in] InitiatingInstance
指向重新发出 I/O 操作的微筛选器驱动程序实例的不透明实例指针。 必须是启动上一个 I/O 操作的同一实例。 此参数是必需的,不能设置为 NULL。
[in] CallbackData
指向回调数据的指针, (以前同步的 I/O 操作 FLT_CALLBACK_DATA) 结构。 此参数是必需的,不能设置为 NULL。
返回值
无
备注
微筛选器驱动程序从操作后回调调用 FltReissueSynchronousIo , (PFLT_POST_OPERATION_CALLBACK) 例程来重新发出同步的 I/O 请求。 它通常从操作后回调例程调用 FltReissueSynchronousIo ,以使用不同的参数重新发出失败的操作,或处理重新分析反弹。 但是,它也可以调用 FltReissueSynchronousIo 来重新发出微筛选器驱动程序通过调用 FltAllocateCallbackData 和 FltPerformSynchronousIo 例程生成的 I/O。 在这种情况下,无论是在操作后回调例程中调用 FltReissueSynchronousIo ,还是在操作回调例程的上下文之外调用,都无关紧要。 对于操作后回调例程上下文之外的调用,请考虑改用 FltReuseCallbackData 和 FltPerformSynchronousIo 例程。
调用方可以在重新发出 I/O 请求之前修改回调数据 (FLT_CALLBACK_DATA) 结构的 I/O 参数块的内容。 如果是,则必须在调用 FltReissueSynchronousIo 之前调用 FltSetCallbackDataDirty。
例如,如果微筛选器驱动程序使用重新分析点,并且为返回STATUS_REPARSE的创建操作调用其创建后回调例程,则微筛选器驱动程序可以为其自己的重新分析点重新发出创建操作。 在这种情况下,微筛选器驱动程序将完成以下步骤:
在回调数据结构的 I/O 参数块中设置FILE_OPEN_REPARSE_POINT标志。
调用 FltReissueSynchronousIo 以重新发出创建请求。
筛选器管理器仅将重新发出的 I/O 请求发送到附加在启动实例下方的微筛选器驱动程序实例 (在 InitiatingInstance 参数中指定的) 和文件系统。 附加到启动实例上方的微筛选器驱动程序实例不会收到重新发出 I/O 请求。
只能重新发出同步的 I/O 操作。 若要使驱动程序能够重新发出,通过在操作后回调例程中调用 FltReissueSynchronousIo ,微筛选器驱动程序必须专门返回预操作回调例程中的FLT_PREOP_SYNCHRONIZE。
注意
微筛选器驱动程序不调用 FltIsOperationSynchronous 例程来确定此操作的预操作回调例程是否FLT_PREOP_SYNCHRONIZE返回。 从 I/O 管理器的角度来看,微筛选器驱动程序调用 FltIsOperationSynchronous 以确定操作本身是否同步。
只能重新发出基于 IRP 的 I/O 操作。 无法重新发出快速 I/O 操作和文件系统筛选器 (FSFilter) 回调操作。 若要确定 I/O 操作是否基于 IRP,请使用 FLT_IS_IRP_OPERATION 宏。
无法重新发出已取消的创建 (IRP_MJ_CREATE) 操作。 在为创建操作调用 FltReissueSynchronousIo 之前,调用方应检查创建操作的文件对象的 Flags 成员。 如果设置了FO_FILE_OPEN_CANCELLED标志,则表示已取消创建操作,并将为此文件对象发出关闭 (IRP_MJ_CLOSE) 操作。 如果为已取消的创建操作调用 FltReissueSynchronousIo ,筛选器管理器会使重新发出 I/O 请求失败,并STATUS_CANCELLED。
注意
当微筛选器驱动程序在创建后回调中重新发出 create 时,它们不必释放并与 CallbackData 中的重分析点 (TagData 字段关联的缓冲区) 设置为 NULL。 相反,筛选器管理器会释放缓冲区并将其设置为 NULL。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 SP4 的 Windows 2000 更新汇总 1;Windows XP SP2 |
最低受支持的服务器 | Windows Server 2003 SP1 |
目标平台 | 通用 |
标头 | fltkernel.h (包括 FltKernel.h) |
Library | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL (非分页 IO 只能在PASSIVE_LEVEL) 重新发出 |