从调度例程返回状态

注意

为了获得最佳可靠性和性能,请使用支持筛选器管理器的 文件系统微筛选器驱动程序 ,而不是旧版文件系统筛选器驱动程序。 若要将旧驱动程序移植到微筛选器驱动程序,请参阅 移植旧筛选器驱动程序的指南

除非完成 IRP,否则未设置完成例程的调度例程应始终返回 IoCallDriver 返回的 NTSTATUS 值。 除非此值STATUS_PENDING,否则它必须与完成 IRP 的驱动程序设置的 Irp-IoStatus.Status> 的值匹配。

设置可能将 IRP 发布到工作队列的完成例程的调度例程应执行以下操作之一:

  • 返回 IoCallDriver 返回的 NTSTATUS 值。
  • 等待完成例程发出事件信号并返回 Irp-IoStatus.Status> 的值。
  • 将 IRP 标记为挂起,将其发布到工作队列,并返回STATUS_PENDING。
  • 如果完成例程可能会将 IRP 发布到工作队列,则调度例程必须将 IRP 标记为挂起并返回STATUS_PENDING。

这些行为中的哪一种是正确的,甚至可能取决于特定的操作。 某些操作(如目录更改通知)无法同步;某些操作(如 oplocks)无法异步。

有关从调度例程返回状态的详细信息,请参阅 调度例程的约束