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 | 请参阅“备注”部分。 |