FILE_STREAM_INFORMATION-Struktur (ntifs.h)

Die FILE_STREAM_INFORMATION-Struktur wird verwendet, um die Streams für eine Datei aufzulisten.

Syntax

typedef struct _FILE_STREAM_INFORMATION {
  ULONG         NextEntryOffset;
  ULONG         StreamNameLength;
  LARGE_INTEGER StreamSize;
  LARGE_INTEGER StreamAllocationSize;
  WCHAR         StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;

Member

NextEntryOffset

Der Offset des nächsten FILE_STREAM_INFORMATION Eintrags. Dieser Member ist 0(0), wenn keine weiteren Einträge auf diesen Folgen folgen.

StreamNameLength

Länge der StreamName-Zeichenfolge in Bytes.

StreamSize

Größe des Datenstroms in Bytes.

StreamAllocationSize

Dateistreamzuordnungsgröße in Byte. In der Regel ist dieser Wert ein Vielfaches der Sektor- oder Clustergröße des zugrunde liegenden physischen Geräts.

StreamName[1]

Unicode-Zeichenfolge, die den Namen des Datenstroms enthält.

Hinweise

Die FILE_STREAM_INFORMATION-Struktur wird verwendet, um die Streams für eine Datei aufzulisten. Dieser Vorgang kann auf eine der folgenden Arten ausgeführt werden:

  • Durch Aufrufen von FltQueryInformationFile oder ZwQueryInformationFile und Angeben von FileStreamInformation für den FileInformationClass-Parameter . Bei der Rückgabe enthält der FileInformation-Puffer eine FILE_STREAM_INFORMATION-Struktur für jeden Dateidatenstrom.

  • Durch Senden einer IRP_MJ_QUERY_INFORMATION Anforderung an das Dateisystem und Angeben von FileStreamInformation für den FileInformationClass-Parameter . Bei der Rückgabe enthält Irp-AssociatedIrp.SystemBuffer> eine FILE_STREAM_INFORMATION-Struktur für jeden Dateidatenstrom.

Zum Abfragen dieser Informationen sind keine spezifischen Zugriffsrechte erforderlich. Daher sind diese Informationen verfügbar, solange die Datei geöffnet ist.

Die Unterstützung für die Streamenumeration ist vom Dateisystem abhängig. Wenn ein Dateisystem keine Streamenumeration unterstützt, sollte es für diese Anforderungen STATUS_INVALID_PARAMETER oder STATUS_NOT_IMPLEMENTED zurückgeben.

Wenn ein Dateisystem die Streamenumeration unterstützt, die Datei jedoch keine anderen Datenströme als den Standarddatenstrom enthält, der unbenannt ist, sollte das Dateisystem eine einzelne FILE_STREAM_INFORMATION-Struktur zurückgeben, die entweder "::$DATA" oder eine Unicode-Zeichenfolge der Länge null als StreamName enthält.

NTFS gibt "::$DATA" als StreamName für den Standarddatenstrom zurück.

Für einen benannten Datenstrom fügt NTFS ":$DATA" an den Streamnamen an. Für einen Benutzerdatenstrom mit dem Namen "Authors" gibt NTFS beispielsweise ":Authors:$DATA" als StreamName zurück.

Beim Aufrufen einer Routine wie ZwCreateFile zum Öffnen eines benannten Dateidatenstroms kann der ":$DATA"-Teil des Namens weggelassen werden. Um beispielsweise den Stream "Authors" einer Datei namens "Book" zu öffnen, kann der Aufrufer "Book:Authors" oder "Book:Authors:$DATA" als Streamnamen angeben. Beide Namen sind gleichwertig.

Die Größe des Puffers, der im FileInformation-Parameter an FltQueryInformationFile oder ZwQueryInformationFile übergeben wird, muss mindestens sizeof (FILE_STREAM_INFORMATION) sein. Wenn dieser Puffer nicht groß genug ist, um eine FILE_STREAM_INFORMATION-Struktur für jeden Dateidatenstrom aufzunehmen, gibt FltQueryInformationFile oder ZwQueryInformationFile STATUS_BUFFER_OVERFLOW oder STATUS_BUFFER_TOO_SMALL zurück. Da ein solcher nicht erfolgreicher Aufruf von FltQueryInformationFile oder ZwQueryInformationFile nicht die erforderliche Puffergröße zurückgibt, müssen Filtertreiber einen oder mehrere zusätzliche Aufrufe von FltQueryInformationFile oder ZwQueryInformationFile durchführen und in jedem Aufruf einen größeren Puffer übergeben, bis der Puffer groß genug ist.

Die Unterstützung für benannte Datenströme ist dateisystemspezifisch. Dateisystemfiltertreiber können auf eine der folgenden Arten bestimmen, ob ein Dateisystem benannte Datenströme unterstützt:

  • Indem Sie FltQueryVolumeInformation oder ZwQueryVolumeInformationFile aufrufen und FileFsAttributeInformation für den FsInformationClass-Parameter angeben. Bei der Rückgabe enthält der FsInformation-Puffer eine FILE_FS_ATTRIBUTE_INFORMATION-Struktur. Wenn das FILE_NAMED_STREAMS Bit im FileSystemAttributes-Member dieser Struktur festgelegt ist, unterstützt das Dateisystem benannte Streams.

  • Indem Sie eine IRP_MJ_QUERY_VOLUME_INFORMATION Anforderung an das Dateisystem senden und FileFsAttributeInformation für den FsInformationClass-Parameter angeben. Bei der Rückgabe enthält Irp-AssociatedIrp.SystemBuffer> eine FILE_FS_ATTRIBUTE_INFORMATION-Struktur. Wenn das FILE_NAMED_STREAMS Bit im FileSystemAttributes-Member dieser Struktur festgelegt ist, unterstützt das Dateisystem benannte Streams.

Die FILE_STREAM_INFORMATION-Struktur muss an einer LONGLONG-Grenze (8 Byte) ausgerichtet werden. Wenn ein Puffer zwei oder mehr dieser Strukturen enthält, fällt der NextEntryOffset-Wert in jedem Eintrag mit Ausnahme des letzten auf eine 8-Byte-Grenze.

Anforderungen

Anforderung Wert
Header ntifs.h (include Ntifs.h, Fltkernel.h)

Weitere Informationen

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile