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 来重新发出微筛选器驱动程序通过调用 FltAllocateCallbackDataFltPerformSynchronousIo 例程生成的 I/O。 在这种情况下,无论是在操作后回调例程中调用 FltReissueSynchronousIo ,还是在操作回调例程的上下文之外调用,都无关紧要。 对于操作后回调例程上下文之外的调用,请考虑改用 FltReuseCallbackDataFltPerformSynchronousIo 例程。

调用方可以在重新发出 I/O 请求之前修改回调数据 (FLT_CALLBACK_DATA) 结构的 I/O 参数块的内容。 如果是,则必须在调用 FltReissueSynchronousIo 之前调用 FltSetCallbackDataDirty

例如,如果微筛选器驱动程序使用重新分析点,并且为返回STATUS_REPARSE的创建操作调用其创建后回调例程,则微筛选器驱动程序可以为其自己的重新分析点重新发出创建操作。 在这种情况下,微筛选器驱动程序将完成以下步骤:

  1. 在回调数据结构的 I/O 参数块中设置FILE_OPEN_REPARSE_POINT标志。

  2. 调用 FltSetCallbackDataDirty

  3. 调用 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) 重新发出

另请参阅

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

IRP_MJ_CREATE 的 FLT_PARAMETERS

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK