檔案資料流程、資料流程內容和Per-Stream內容

注意

為了獲得最佳可靠性和效能,請使用 檔案系統迷你篩選驅動程式 搭配篩選管理員支援,而不是舊版檔案系統篩選驅動程式。 若要將舊版驅動程式移植到迷你篩選驅動程式,請參閱 移植舊版篩選驅動程式的指導方針

檔案資料流程是用來保存檔案資料的位元組序列。 一個檔案通常只有一個檔案資料流,也就是檔案的預設資料流。 不過,在支援多個資料流的檔案系統上,每個檔案可以有多個檔案資料流。 其中一個資料流程是未命名的預設資料流程。 其他則命名為替代資料流程。 當您開啟檔案時,實際上是開啟指定檔案的資料流程。

當檔案系統第一次開啟檔案資料流程時,它會建立檔案系統特定的 資料流程內容 結構,例如檔案控制區塊 (FCB) 或資料流程控制區塊 (SCB) ,並將這個結構的位址儲存在產生的檔案物件的 FsCoNtext 成員中。

針對本機檔案系統,如果已開啟的檔案資料流程再次開啟 (以進行共用讀取存取,例如) ,I/O 子系統會建立另一個檔案物件,但檔案系統不會建立新的資料流程內容。 這兩個檔案物件都會接收相同資料流程內容結構的位址。 因此,針對本機檔案系統,資料流程內容指標會唯一識別檔案資料流程。

對於支援每個資料流程內容的網路檔案系統,如果已開啟的檔案資料流程使用相同的網路共用名稱或 IP 位址再次開啟,則行為會與本機檔案系統的行為相同。 I/O 子系統會建立新的檔案物件,但檔案系統不會建立新的資料流程內容。 相反地,它會將相同的 FsCoNtext 指標值指派給這兩個檔案物件。 不過,如果使用不同的路徑開啟檔案資料流程 (例如,不同的共用名稱,或先前使用共用名稱開啟之檔案的 IP 位址) ,檔案系統就會建立新的資料流程內容。 因此,對於支援每個資料流程內容的網路檔案系統, FsCoNtext 指標不會唯一識別檔案資料流程。

每個資料流程內容是篩選定義的結構,其中包含FSRTL_PER_STREAM_CONTEXT結構做為其其中一個成員。 篩選驅動程式會使用此結構來追蹤檔案系統開啟之每個檔案資料流程的相關資訊。

Per-Stream內容的檔案系統支援

在 Windows XP 和更新版本上,支援每個資料流程內容的檔案系統必須使用包含 FSRTL_ADVANCED_FCB_HEADER 結構的資料流程內容結構。

檔案系統擁有與特定檔案資料流程相關聯的每個資料流程內容的全域清單。 當檔案系統為檔案資料流程建立新的資料流程內容 (FSRTL_ADVANCED_FCB_HEADER物件) 時,它會呼叫 FsRtlSetupAdvancedHeader 來初始化此清單。 當舊版檔案系統篩選驅動程式呼叫 FsRtlInsertPerStreamCoNtext時,篩選準則所建立的每個資料流程內容會新增至全域清單。

當檔案系統刪除其檔案資料流程的資料流程內容時,它會呼叫 FsRtlTeardownPerStreamCoNtexts 來釋放篩選與檔案資料流程相關聯的所有每個資料流程內容。 此常式會針對全域清單中的每個資料流程內容呼叫 FreeCallback 常式。 FreeCallback常式必須假設檔案資料流程的檔案物件已經釋放。

若要查詢檔案系統是否支援指定檔案物件所代表之檔案資料流程的個別資料流程內容,請在檔案物件上呼叫 FsRtlSupportsPerStreamCoNtexts 。 檔案系統可能會針對某些類型的檔案支援每個資料流程內容,但不支援其他類型的內容。 例如,NTFS 和 FAT 目前不支援分頁檔案的每個資料流程內容。 因此,如果 FsRtlSupportsPerStreamCoNtexts 針對一個檔案資料流程傳回 TRUE,這並不表示它會針對所有檔案資料流程傳回 TRUE。