使用 IRP 完成例程
注意
为了获得最佳可靠性和性能,请使用支持筛选器管理器的 文件系统微筛选器驱动程序 ,而不是旧的文件系统筛选器驱动程序。 若要将旧驱动程序移植到微筛选器驱动程序,请参阅 移植旧版筛选器驱动程序指南。
文件系统筛选器驱动程序使用类似于设备驱动程序使用的完成例程。 完成例程对 IRP 执行完成处理。 将 IRP 向下传递到下一级别驱动程序的任何驱动程序例程都可以选择通过在调用 IoCallDriver 之前调用 IoSetCompletionRoutine 来注册 IRP 的完成例程。
每个 IRP 完成例程的定义如下:
NTSTATUS
(*PIO_COMPLETION_ROUTINE) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
在任意线程上下文中,在 IRQL <= DISPATCH_LEVEL 处调用完成例程。
由于可以在 IRQL DISPATCH_LEVEL调用它们,因此完成例程无法调用必须在较低 IRQL(如 IoDeleteDevice)下调用的内核模式例程。 出于同一原因,必须在完成例程中使用的任何数据结构从非分页池中分配。
本部分讨论以下主题:
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈