共用方式為


判斷 I/O 作業的緩衝方法

如同設備磁碟機,檔案系統負責在使用者模式應用程式與系統的裝置之間傳輸資料。 作業系統提供下列三種方法來存取資料緩衝區:

  • 緩衝 I/O中,I/O 管理員會為非分頁集區的作業配置系統緩衝區。 I/O 管理員會將此系統緩衝區中的資料複製到應用程式的使用者緩衝區,反之亦然,在起始 I/O 作業的執行緒內容中。

  • 直接 I/O中,I/O 管理員會探查並鎖定使用者緩衝區。 然後它會建立記憶體描述元清單, (MDL) 對應鎖定的緩衝區。 I/O 管理員會在起始 I/O 作業的執行緒內容中存取緩衝區。

  • 未緩衝處理或直接 I/O中,I/O 管理員不會配置系統緩衝區,也不會鎖定或對應使用者緩衝區。 相反地,它只會將緩衝區的原始使用者空間虛擬位址傳遞至檔案系統堆疊。 驅動程式負責確保它們在起始執行緒的內容中執行,以及緩衝區位址有效。

    迷你篩選驅動程式必須先驗證使用者空間中的任何位址,才能嘗試使用它。 I/O 管理員和篩選管理員不會驗證這類位址,也不會驗證內嵌在傳遞至迷你篩選驅動程式之緩衝區中的指標。

所有標準 Microsoft 檔案系統都未針對大部分 I/O 處理使用緩衝處理或直接 I/O。

如需緩衝方法的詳細資訊,請參閱 存取資料緩衝區的方法

針對 IRP 型 I/O 作業,使用的緩衝方法是作業特定的,而且取決於下列因素:

  • 正在執行的 I/O 作業類型

  • 檔案系統磁片區之DEVICE_OBJECT結構的Flags成員值

  • 針對 I/O 控制項 (IOCTL) 和檔案系統控制項 (FSCTL) 作業,在定義 IOCTL 或 FSCTL 時傳遞至CTL_CODE宏的 TransferType 參數值

具有緩衝區的快速 I/O 作業一律不會使用緩衝處理或直接 I/O。

檔案系統回呼作業沒有緩衝區。

本節包括:

可IRP-Based或快速 I/O 的作業

遵循裝置物件旗標的 IRP 型 I/O 作業

一律使用緩衝 I/O 的 I/O 作業

一律不會使用緩衝或直接 I/O 的 IRP 型 I/O 作業

IRP 型 IOCTL 和 FSCTL 作業

沒有緩衝區的 IRP 型 I/O 作業