次の方法で共有


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

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構造体が含まれます。 FILE_NAMED_STREAMS ビットがこの構造体の FileSystemAttributes メンバーに設定されている場合、ファイル システムは名前付きストリームをサポートします。

  • IRP_MJ_QUERY_VOLUME_INFORMATION要求をファイル システムに送信し、FsInformationClass パラメーターに FileFsAttributeInformation を指定します。 戻り値 Irp->AssociatedIrp.SystemBuffer には、FILE_FS_ATTRIBUTE_INFORMATION構造体が含まれています。 FILE_NAMED_STREAMS ビットがこの構造体の FileSystemAttributes メンバーに設定されている場合、ファイル システムは名前付きストリームをサポートします。

FILE_STREAM_INFORMATION構造体は、LONGLONG (8 バイト) 境界に配置する必要があります。 バッファーにこれらの構造体が 2 つ以上含まれている場合、NextEntryOffset 各エントリの値 (最後を除く) は 8 バイトの境界に置きます。

必要条件

要件 価値
ヘッダー ntifs.h (Ntifs.h、Fltkernel.h を含む)

関連項目

FltQueryInformationFile の

FltQueryVolumeInformation の

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile