IRP 不同于快速 I/O

注意

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

IRP 是请求 I/O 操作的默认机制。 IRP 可用于同步或异步 I/O,以及缓存或非缓存 I/O。 IRP 还用于分页 I/O。 内存管理器通过向文件系统发送相应的 IRP 来处理页面错误。

快速 I/O 专为缓存文件上的快速同步 I/O 而设计。 在快速 I/O 操作中,数据直接在用户缓冲区和系统缓存之间传输,绕过文件系统和存储驱动程序堆栈。 (存储驱动程序不使用快速 I/O.) 如果在收到快速 I/O 读取或写入请求时,要从文件读取的所有数据都驻留在系统缓存中,则会立即满足该请求。 否则,可能会发生页面错误,导致生成一个或多个 IRP。 发生页面错误时,快速 I/O 例程返回 FALSE,或将调用方置于等待状态,直到处理页面错误。 如果快速 I/O 例程返回 FALSE,则请求的操作失败,调用方必须创建 IRP。

文件系统和旧版文件系统筛选器是支持 IRP 所必需的,但不需要它们来支持快速 I/O。 但是,文件系统和文件系统筛选器必须实现快速 I/O 例程。 即使文件系统和文件系统筛选器不支持快速 I/O,它们也必须定义返回 FALSE (即快速 I/O 例程不实现任何功能) 。 当 I/O 管理器收到同步文件 I/O (请求(而不是分页 I/O) )时,它会首先调用快速 I/O 例程。 如果快速 I/O 例程返回 TRUE,则它为操作提供服务。 如果快速 I/O 例程返回 FALSE,则 I/O 管理器将改为创建并发送 IRP。

无需文件系统筛选器驱动程序即可在控制设备对象上支持 I/O。 但是,附加到文件系统或卷的筛选器设备对象需要将所有无法识别或不需要的 IRP 传递到驱动程序堆栈上的下一个较低驱动程序。 此外,附加到卷的筛选器设备对象必须实现 FastIoDetachDevice。