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。

另請參閱

CcFlushCache

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_FLUSH_BUFFERS (WDK 核心參考)