在预操作回调例程中完成 I/O 操作

若要 完成 I/O 操作,则意味着停止对操作的处理,为其分配一个最终 NTSTATUS 值,并将其返回到筛选器管理器。

当微筛选器驱动程序完成 I/O 操作时,筛选器管理器将执行以下操作:

  • 不将操作发送到当前微筛选器驱动程序下面的微筛选器驱动程序、旧筛选器或文件系统。

  • 调用微筛选器驱动程序实例堆栈中当前微筛选器驱动程序上方的微筛选器驱动程序的 后操作回调例程

  • 不为操作调用当前微筛选器驱动程序的后操作回调例程(如果存在)。

微筛选器驱动程序的 预操作回调例程 通过执行以下步骤完成 I/O 操作:

  1. 将回调数据结构的 IoStatus.Status 字段设置为操作的最终 NTSTATUS 值。

  2. 返回FLT_PREOP_COMPLETE。

完成 I/O 操作的预操作回调例程无法在 CompletionContext 输出参数) 中设置非 NULL 完成上下文 (。

微筛选器驱动程序还可以通过执行以下步骤完成以前插入的 I/O 操作的工作例程中的操作:

  1. 将回调数据结构的 IoStatus.Status 字段设置为操作的最终 NTSTATUS 值。

  2. 当工作例程调用 FltCompletePendedPreOperation 时,在 CallbackStatus 参数中传递FLT_PREOP_COMPLETE。

完成 I/O 操作时,微筛选器驱动程序必须将回调数据结构的 IoStatus.Status 字段设置为操作的最终 NTSTATUS 值,但此 NTSTATUS 值不能STATUS_PENDING或STATUS_FLT_DISALLOW_FAST_IO。 对于清理或关闭操作,字段必须STATUS_SUCCESS。 这些操作不能使用任何其他 NTSTATUS 值完成。

完成 I/O 操作通常称为操作成功或失败,具体取决于 NTSTATUS 值:

  • 成功执行 I/O 操作意味着使用成功或信息性 NTSTATUS 值(如 STATUS_SUCCESS)完成此操作。

  • I/O 操作 失败 意味着使用错误或警告 NTSTATUS 值完成此操作,例如STATUS_INVALID_DEVICE_REQUEST或STATUS_BUFFER_OVERFLOW。

NTSTATUS 值在 ntstatus.h 中定义。 这些值分为四类:成功、信息性、警告和错误。 有关这些值的详细信息,请参阅 使用 NTSTATUS 值