FILE_STREAM_INFORMATION 結構 (ntifs.h)
FILE_STREAM_INFORMATION 結構可用來列舉檔案的數據流。
語法
typedef struct _FILE_STREAM_INFORMATION {
ULONG NextEntryOffset;
ULONG StreamNameLength;
LARGE_INTEGER StreamSize;
LARGE_INTEGER StreamAllocationSize;
WCHAR StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
成員
NextEntryOffset
下一個FILE_STREAM_INFORMATION專案的位移。 如果沒有其他專案遵循此成員,則此成員為零。
StreamNameLength
StreamName 字串的長度,以位元組為單位。
StreamSize
數據流的大小,以位元組為單位。
StreamAllocationSize
檔案數據流配置大小,以位元組為單位。 此值通常是基礎實體裝置的扇區或叢集大小的倍數。
StreamName[1]
包含數據流名稱的 Unicode 字串。
備註
FILE_STREAM_INFORMATION 結構可用來列舉檔案的數據流。 此作業可以透過下列其中一種方式來執行:
呼叫 FltQueryInformationFile 或 ZwQueryInformationFile ,並指定 FileInformationClass 參數的 FileStreamInformation 。 傳回時, FileInformation 緩衝區包含每個檔案數據流的FILE_STREAM_INFORMATION結構。
將IRP_MJ_QUERY_INFORMATION要求傳送至文件系統,並指定 FileInformationClass 參數的 FileStreamInformation 。 傳回時,Irp-AssociatedIrp.SystemBuffer> 會針對每個檔案數據流包含FILE_STREAM_INFORMATION結構。
查詢這項資訊不需要特定訪問許可權。 因此,只要檔案開啟,此資訊即可使用。
支援串流列舉是文件系統相依的。 如果文件系統不支持數據流列舉,它應該傳回這些要求的STATUS_INVALID_PARAMETER或STATUS_NOT_IMPLEMENTED。
如果文件系統支持數據流列舉,但檔案沒有未命名的預設數據流以外的數據流,則檔系統應該傳回包含 “::$DATA” 或零長度 Unicode 字符串的單一FILE_STREAM_INFORMATION結構做為 StreamName。
NTFS 會傳回 「::$DATA」 做為預設數據流的 StreamName 。
針對具名數據流,NTFS 會將 「:$DATA」 附加至數據流名稱。 例如,對於名稱為 「Authors」 的用戶數據流,NTFS 會將 「:Authors:$DATA」 傳回為 StreamName。
呼叫 如 ZwCreateFile 的例程以開啟具名檔案數據流時,可以省略名稱的 “:$DATA” 部分。 例如,若要開啟名為 「Book」 的檔案「作者」數據流,呼叫端可以將 “Book:Authors” 或 “Book:Authors:$DATA” 指定為數據流名稱。 這兩個名稱都相等。
在 FileInformation 參數中傳遞至 FltQueryInformationFile 或 ZwQueryInformationFile 的緩衝區大小必須至少為 (FILE_STREAM_INFORMATION) 。 如果這個緩衝區不夠大,無法保存每個檔案數據流的FILE_STREAM_INFORMATION結構, FltQueryInformationFile 或 ZwQueryInformationFile 會傳回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL。 由於 這類不成功的 FltQueryInformationFile 或 ZwQueryInformationFile 不會傳回所需的緩衝區大小,因此篩選驅動程式必須對 FltQueryInformationFile 或 ZwQueryInformationFile 進行一或多個額外的呼叫,在每個呼叫中傳遞較大的緩衝區,直到緩衝區夠大為止。
具名數據流的支持是文件系統特定的。 檔案系統篩選驅動程式可以透過下列任一種方式來判斷檔案系統是否支援具名資料流:
呼叫 FltQueryVolumeInformation 或 ZwQueryVolumeInformationFile ,併為 FsInformationClass 參數指定 FileFsAttributeInformation。 傳回時, FsInformation 緩衝區包含FILE_FS_ATTRIBUTE_INFORMATION結構。 如果FILE_NAMED_STREAMS位是在這個結構的 FileSystemAttributes 成員中設定,則文件系統支援具名數據流。
將IRP_MJ_QUERY_VOLUME_INFORMATION要求傳送至文件系統,並指定 FsInformationClass 參數的 FileFsAttributeInformation。 傳回時,Irp-AssociatedIrp.SystemBuffer> 包含FILE_FS_ATTRIBUTE_INFORMATION結構。 如果FILE_NAMED_STREAMS位是在這個結構的 FileSystemAttributes 成員中設定,則文件系統支援具名數據流。
FILE_STREAM_INFORMATION 結構必須對齊 LONGLONG (8 位元組) 界限。 如果緩衝區包含兩個或多個這些結構,則每個專案中的 NextEntryOffset 值會落在 8 位元組界限上,但最後一個專案除外。
規格需求
需求 | 值 |
---|---|
標頭 | ntifs.h (包括 Ntifs.h、Fltkernel.h) |