FltPerformAsynchronousIo 函数 (fltkernel.h)

微型筛选器驱动程序调用 FltPerformAsynchronousIo 来启动异步 I/O作。

语法

NTSTATUS FLTAPI FltPerformAsynchronousIo(
  [in, out] PFLT_CALLBACK_DATA               CallbackData,
  [in]      PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
  [in]      PVOID                            CallbackContext
);

参数

[in, out] CallbackData

指向上一次调用 FltAllocateCallbackData分配的回调数据(FLT_CALLBACK_DATA)结构的指针。 此参数是必需的,不能 NULL。 调用方负责通过调用 FltFreeCallbackData来释放此结构。

[in] CallbackRoutine

指向完成 I/O作时要调用的 PFLT_COMPLETED_ASYNC_IO_CALLBACK类型回调例程的指针。 注意:筛选器管理器在调用启动实例(在 Instance 参数中指定的 FltAllocateCallbackData)的任何微型筛选器驱动程序的后作回调(PFLT_POST_OPERATION_CALLBACK) 例程后调用此例程。 此参数是必需的,不能 NULL。 即使 FltPerformAsynchronousIo 失败,筛选器管理器也会始终调用此例程。

[in] CallbackContext

要传递给 CallbackRoutine 的上下文指针 此参数是可选的,并且可以 NULL

返回值

FltPerformAsynchronousIo 返回STATUS_SUCCESS,以指示 I/O作已由文件系统完成,并且已调用 CallbackRoutine 点的回调例程。 否则,它将返回适当的 NTSTATUS 值,例如以下值之一:

返回代码 描述
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST 无法异步执行IRP_MJ_CREATE请求。 这是一个错误代码。
STATUS_PENDING 该作STATUS_PENDING返回。 筛选器管理器将调用回调例程,CallbackRoutine I/O作完成后指向该例程。 此代码仅指示作已启动。
STATUS_FLT_IO_COMPLETE 该作由微型筛选器驱动程序的预作回调例程完成,该驱动程序的实例附加到启动实例下方。

言论

微型筛选器驱动程序调用 FltPerformAsynchronousIo 在调用 FltAllocateCallbackData 以分配作的回调数据结构后启动异步 I/O作。

FltPerformAsynchronousIo 仅将 I/O作发送到附加到启动实例下方的微型筛选器驱动程序实例(在 Instance 参数中指定的 FltAllocateCallbackData)和文件系统。 附加在指定实例上方的微型筛选器驱动程序不会收到 I/O作。

微型筛选器驱动程序只能启动基于 IRP 的 I/O作。 它们无法启动快速 I/O 或文件系统筛选器(FSFilter)回调作。

微型筛选器驱动程序应仅对不能使用以下例程的异步 I/O作使用 FltPerformAsynchronousIo

无法异步执行IRP_MJ_CREATE请求。

回调数据(FLT_CALLBACK_DATA)结构可以在回调例程 回调例程 被调用后随时释放或重复使用。 调用方可以通过调用 FltFreeCallbackData 来释放回调数据结构,或者通过调用 FltReuseCallbackData来准备重新使用。

注意

STATUS_SUCCESS和STATUS_FLT_IO_COMPLETE指示 I/O作已完成,但不指示 I/O作的最终状态。 若要确定基础微型筛选器驱动程序、筛选器驱动程序和文件系统返回的实际作状态,CallbackRoutine 应检查在 CallbackRoutine's CallbackContext 参数中收到的回调数据结构的 IoStatus 成员。

由于筛选器管理器始终调用 CallbackRoutine 指向的回调例程,即使 FltPerformAsynchronousIo 失败,微型筛选器驱动程序也可以直接在回调例程中执行释放或重用作。

FltPerformAsynchronousIo 的调用方可以在 IRQL <= APC_LEVEL(如果在作 FLT_IO_PARAMETER_BLOCK 结构的 IrpFlags 成员中设置IRP_PAGING_IO标志)。 (此标志仅适用于IRP_MJ_READ、IRP_MJ_WRITE、IRP_MJ_QUERY_INFORMATION和IRP_MJ_SET_INFORMATION作。否则,调用方必须在 IRQL PASSIVE_LEVEL上运行。

要求

要求 价值
目标平台 普遍
标头 fltkernel.h (包括 Fltkernel.h)
FltMgr.lib
DLL Fltmgr.sys
IRQL 请参阅“备注”部分。

另请参阅

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK