IRP_MJ_FLUSH_BUFFERS (FS 和筛选器驱动程序)
发送时间
当需要将缓冲的数据刷新到磁盘时,I/O 管理器、其他操作系统组件和其他内核模式驱动程序会发送IRP_MJ_FLUSH_BUFFERS请求。 例如,当用户模式应用程序调用了 Win32 函数(如 FlushFileBuffers)时,可以发送它。 (对于文件系统驱动程序和文件系统筛选器驱动程序,调用 CcFlushCache 比发送 IRP.)
维护数据内部缓冲区的所有文件系统和筛选器驱动程序都必须处理此 IRP,以便可以在系统关闭期间保留对文件数据或元数据的更改。
操作:文件系统驱动程序
文件系统驱动程序应刷新到与文件对象关联的任何重要数据或元数据磁盘,并完成 IRP。 有关如何处理此 IRP 的详细信息,请研究 FASTFAT 示例。
操作:旧版文件系统筛选器驱动程序
筛选器驱动程序应刷新到与文件对象关联的任何重要数据或元数据的磁盘,并将此 IRP 向下传递到堆栈上下一个较低的驱动程序。
参数
文件系统或筛选器驱动程序使用给定的 IRP 调用 IoGetCurrentIrpStackLocation ,以获取指向 IRP 中其自身 堆栈位置 的指针,如以下列表所示为 IrpSp。 (IRP 显示为 Irp.) 驱动程序可以使用 IRP 的以下成员和 IRP 堆栈位置中设置的信息来处理刷新缓冲区请求:
DeviceObject 是指向目标设备对象的指针。
Irp->IoStatus 指向一个 IO_STATUS_BLOCK 结构,该结构接收最终完成状态和有关所请求操作的信息。
IrpSp->FileObject 指向与 DeviceObject 关联的文件对象。
IrpSp-FileObject> 参数包含指向 RelatedFileObject 字段的指针,该字段也是FILE_OBJECT结构。 FILE_OBJECT 结构的 RelatedFileObject 字段在处理IRP_MJ_FLUSH_BUFFERS期间无效,不应使用。
IrpSp->MajorFunction 设置为 IRP_MJ_FLUSH_BUFFERS。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈