判斷 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。
檔案系統回呼作業沒有緩衝區。
本節包括: