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”的单个FILE_STREAM_INFORMATION结构,或零长度的 Unicode 字符串作为 streamName

NTFS 返回“::$DATA”作为默认数据流的 StreamName

对于命名数据流,NTFS 会将“:$DATA”追加到流名称。 例如,对于名为“Authors”的用户数据流,NTFS 将返回“:Authors:$DATA”作为 StreamName

调用例程(如 ZwCreateFile)以打开命名文件流时,可以省略名称的“:$DATA”部分。 例如,若要打开名为“Book”的文件的“作者”流,调用方可以将“Book:Authors”或“Book:Authors:$DATA”指定为流名称。 这两个名称都是等效的。

FileInformation 参数中传递给 FltQueryInformationFileZwQueryInformationFi le 的缓冲区的大小必须至少 (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 字节边界上。

要求

要求 价值
标头 ntifs.h(包括 Ntifs.h、Fltkernel.h)

另请参阅

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile