禁止在预操作回调例程中执行快速 I/O 操作

在某些情况下,微筛选器驱动程序可能会选择禁止快速 I/O 操作,而不是完成此操作。 禁止快速 I/O 操作会阻止快速 I/O 路径用于该操作。

与完成 I/O 操作一样,禁止快速 I/O 操作意味着停止对它的处理并将其返回到筛选器管理器。 但是,禁止快速 I/O 操作不同于完成快速 I/O 操作。 如果微筛选器驱动程序禁止 I/O 管理器发出的快速 I/O 操作,则 I/O 管理器可能会重新发出与基于 IRP 的等效操作相同的操作。

当微筛选器驱动程序的 预操作回调例程 禁止快速 I/O 操作时,筛选器管理器将执行以下操作:

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

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

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

微筛选器驱动程序通过从操作的预操作回调例程返回FLT_PREOP_DISALLOW_FASTIO来禁止快速 I/O 操作。

预操作回调例程不应设置回调数据结构的 IoStatus.Status 字段,因为筛选器管理器会自动将此字段设置为STATUS_FLT_DISALLOW_FAST_IO。

只能为快速 I/O 操作返回FLT_PREOP_DISALLOW_FASTIO。 若要确定某个操作是否为快速 I/O 操作,请参阅 FLT_IS_FASTIO_OPERATION

微筛选器驱动程序无法为IRP_MJ_SHUTDOWN、IRP_MJ_VOLUME_MOUNT或IRP_MJ_VOLUME_DISMOUNT操作返回FLT_PREOP_DISALLOW_FASTIO。