次の方法で共有


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エントリのオフセット。 このメンバーの後に他のエントリがない場合、このメンバーは 0 になります。

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" または長さ 0 の Unicode 文字列を StreamName として含む単一のFILE_STREAM_INFORMATION構造体を返す必要があります。

NTFS は、既定のデータ ストリームの StreamName として "::$DATA" を返します。

名前付きデータ ストリームの場合、NTFS はストリーム名に ":$DATA" を追加します。 たとえば、"Authors" という名前のユーザー データ ストリームの場合、NTFS は StreamName として ":Authors:$DATA" を返します。

ZwCreateFile などのルーチンを呼び出して名前付きファイル ストリームを開く場合は、名前の ":$DATA" 部分を省略できます。 たとえば、"Book" という名前のファイルの "Authors" ストリームを開くには、呼び出し元はストリーム名として "Book:Authors" または "Book:Authors:$DATA" を指定できます。 どちらの名前も同等です。

FileInformation パラメーターで FltQueryInformationFile または ZwQueryInformationFile に渡されるバッファーのサイズは、少なくとも sizeof (FILE_STREAM_INFORMATION) である必要があります。 このバッファーがファイル ストリームごとにFILE_STREAM_INFORMATION構造体を保持するのに十分な大きさでない場合、 FltQueryInformationFile または ZwQueryInformationFile はSTATUS_BUFFER_OVERFLOWまたはSTATUS_BUFFER_TOO_SMALLを返します。 FltQueryInformationFile または ZwQueryInformationFile のこのような呼び出しが失敗しても、必要なバッファー サイズが返されないため、フィルター ドライバーは FltQueryInformationFile または ZwQueryInformationFile に対して 1 つ以上の追加呼び出しを行い、バッファーが十分な大きさになるまで、各呼び出しでより大きなバッファーを渡す必要があります。

名前付きデータ ストリームのサポートは、ファイル システム固有です。 ファイル システム フィルター ドライバーは、ファイル システムが次のいずれかの方法で名前付きストリームをサポートしているかどうかを判断できます。

  • FltQueryVolumeInformation または ZwQueryVolumeInformationFile を呼び出し、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 バイト) 境界に配置する必要があります。 バッファーにこれらの構造体が 2 つ以上含まれている場合、各エントリの NextEntryOffset 値 (最後を除く) は 8 バイトの境界になります。

要件

要件
Header ntifs.h (Ntifs.h、Fltkernel.h を含む)

こちらもご覧ください

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile