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 并为 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 参数中传递给 FltQueryInformationFileZwQueryInformationFile 的缓冲区大小必须至少为 (FILE_STREAM_INFORMATION) 。 如果此缓冲区的大小不足以容纳每个文件流的FILE_STREAM_INFORMATION结构, 则 FltQueryInformationFileZwQueryInformationFile 将返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL。 由于对 FltQueryInformationFileZwQueryInformationFile 的此类失败调用不会返回所需的缓冲区大小,因此筛选器驱动程序必须对 FltQueryInformationFileZwQueryInformationFile 进行一个或多个附加调用,并在每次调用中传递更大的缓冲区,直到缓冲区足够大。

对命名数据流的支持特定于文件系统。 文件系统筛选器驱动程序可以通过以下任一方式确定文件系统是否支持命名流:

  • 通过调用 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 字节边界上。

要求

要求
Header ntifs.h (包括 Ntifs.h、Fltkernel.h)

另请参阅

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile