共用方式為


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 結構可用來列舉檔案的數據流。 這項作業可以透過下列其中一種方式來執行:

  • 呼叫 FltQueryInformationFileZwQueryInformationFile 並指定 fileStreamInformation FileInformationClass 參数。 傳回時,FileInformation 緩衝區包含每個檔案數據流的FILE_STREAM_INFORMATION結構。

  • 將IRP_MJ_QUERY_INFORMATION要求傳送至文件系統,並指定 fileStreamInformation FileInformationClass 參數。 傳回時,Irp->AssociatedIrp.SystemBuffer 包含每個檔案數據流的FILE_STREAM_INFORMATION結構。

查詢此資訊不需要任何特定的訪問許可權。 因此,只要檔案開啟,這項資訊即可使用。

支援串流列舉是文件系統相依的。 如果文件系統不支持數據流列舉,它應該會針對這些要求傳回STATUS_INVALID_PARAMETER或STATUS_NOT_IMPLEMENTED。

如果文件系統支持數據流列舉,但檔案沒有未命名的預設數據流以外的數據流,則檔系統應該傳回包含 “::$DATA” 或長度為零的 Unicode 字符串做為 streamName的單一 FILE_STREAM_INFORMATION 結構。

NTFS 會傳回 「::$DATA」 作為預設數據流的 StreamName

針對具名數據流,NTFS 會將 「:$DATA」 附加至數據流名稱。 例如,對於名稱為 「Authors」 的用戶數據流,NTFS 會傳回 「:Authors:$DATA」 作為 StreamName

呼叫如 ZwCreateFile 等例程以開啟具名檔案數據流時,可以省略名稱的 “:$DATA” 部分。 例如,若要開啟名為 「Book」 檔案的 「Authors」 資料流,呼叫端可以將 「Book:Authors」 或 「Book:Authors:$DATA」 指定為數據流名稱。 這兩個名稱都相等。

傳遞至 FileInformation 參數的緩衝區大小,FltQueryInformationFileZwQueryInformationFile 至少必須 sizeof (FILE_STREAM_INFORMATION)。 如果這個緩衝區不夠大,無法保存每個檔案數據流的FILE_STREAM_INFORMATION結構,FltQueryInformationFileZwQueryInformationFile 會傳回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL。 由於對 FltQueryInformationFileZwQueryInformationFile 不會傳回所需的緩衝區大小,因此篩選驅動程式必須對 fltQueryInformationFile 或 ZwQueryInformationFile 進行一或多個額外的 呼叫,,在每個呼叫中傳遞較大的緩衝區,直到緩衝區夠大為止。

支援具名數據流是文件系統特定的。 檔案系統篩選驅動程式可以使用下列任一種方式來判斷檔案系統是否支援具名資料流:

  • 藉由呼叫 FltQueryVolumeInformationZwQueryVolumeInformationFile,併為 FsInformationClass 參數指定 FileFsAttributeInformation。 傳回時,FsInformation 緩衝區包含FILE_FS_ATTRIBUTE_INFORMATION結構。 如果在 FileSystemAttributes 中設定FILE_NAMED_STREAMS位 這個結構的成員,則文件系統支援具名數據流。

  • 將IRP_MJ_QUERY_VOLUME_INFORMATION要求傳送至文件系統,併為 FsInformationClass 參數指定 FileFsAttributeInformation。 傳回時,Irp->AssociatedIrp.SystemBuffer 包含FILE_FS_ATTRIBUTE_INFORMATION結構。 如果在 FileSystemAttributes 中設定FILE_NAMED_STREAMS位 這個結構的成員,則文件系統支援具名數據流。

FILE_STREAM_INFORMATION 結構必須對齊 LONGLONG (8 位元組) 界限。 如果緩衝區包含兩個或多個這些結構,則每個專案中 NextEntryOffset 值,但最後一個值都落在 8 位元組界限上。

要求

要求 價值
標頭 ntifs.h (include Ntifs.h, Fltkernel.h)

另請參閱

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile