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

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

[in] CallbackRoutine

指向在完成 I/O 操作时调用 的PFLT_COMPLETED_ASYNC_IO_CALLBACK类型的回调例程的指针。 注意:筛选器管理器在调用操作后回调 (PFLT_POST_OPERATION_CALLBACK) 例程后调用此例程,这些驱动程序的实例附加到实例参数中指定的启动实例 (到 FltAllocateCallbackData) 。 此参数是必需的,不能为 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。 当 I/O 操作完成时,筛选器管理器将调用 CallbackRoutine 指向的回调例程。 此代码仅指示操作已启动。
STATUS_FLT_IO_COMPLETE 该操作由微型筛选器驱动程序的预操作回调例程完成,该驱动程序的实例附加到启动实例下方。

注解

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

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

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

微筛选器驱动程序应仅将 FltPerformAsynchronousIo 用于无法使用以下例程的异步 I/O 操作:

IRP_MJ_CREATE请求不能异步执行。

在调用 (CallbackRoutine 指向的回调例程后,可随时释放或重用FLT_CALLBACK_DATA) 结构的回调数据。 调用方可以通过调用 FltFreeCallbackData 释放回调数据结构,也可以通过调用 FltReuseCallbackData 来准备其重用。

注意

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

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

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

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library 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