次の方法で共有


ファイル ストリーム (ローカル ファイル システム)

ストリームはバイトシーケンスです。 NTFS ファイル システムでは、ストリームには、ファイルに書き込まれ、属性やプロパティよりもファイルに関する詳細情報を提供するデータが含まれます。 たとえば、検索キーワードを含むストリームや、ファイルを作成するユーザー アカウントの ID を作成できます。

ファイルに関連付けられている各ストリームには、独自の割り当てサイズ、実際のサイズ、および有効なデータ長があります。

  • 割り当てサイズは、ストリーム用に予約されているディスク領域の量です。
  • 実際のサイズは、呼び出し元によって使用されているバイト数です。
  • 有効なデータ長 (VDL) は、ストリームの割り当てサイズから初期化されるバイト数です。

また、各ストリームは、圧縮、暗号化、スパースのために独自の状態を維持します。 ファイルのFILE_ATTRIBUTE_SPARSE_FILE属性は、いずれかのストリームがスパースであった場合に FindFirstFile、FindFirstFileExFindNextFile 関数から返されるWIN32_FIND_DATA構造体の dwFileAttributes メンバーに設定されます。 GetFileAttributesGetFileAttributesExGetFileAttributesTransactedGetFileInformationByHandleおよび GetFileInformationByHandleEx は、ストリームが指定されていない場合、既定のデータ ストリームのスパース状態を返します。

ストリームに関連付けられているファイル時刻はありません。 ファイル内のストリームが更新されると、ファイルのファイル時刻が更新されます。

機会ロックは各ストリームごとに管理されます。 共有モードは、ストリームごとにも維持されます。 ファイルに対して削除アクセスが要求されると、オペレーティング システムは、ファイル内のすべての開いているストリームで削除アクセスをチェックします。 別のプロセスが FILE_SHARE_DELETE アクセス許可を持たないストリームを開いた場合、削除アクセス用にファイルを開くことはできません。

コピーされるファイルにデータ ストリームがあり、ネットワーク リダイレクターが使用されている場合、クライアントに読み取りアクセス許可と読み取り属性アクセス許可の両方がある場合にのみ、ファイルをコピーできます。

ストリームの名前付け規則

Windows シェル のコマンド ラインから指定した場合、ストリームの完全な名前は "filename:stream name:stream type" になります。例: "myfile.dat:stream1:$DATA"。

ファイル名に適した文字は、ストリーム名 (スペースを含む) でも有効です。 詳細については、「ファイルの 名前付け」を参照してください。 ストリームの種類 (属性型コードとも呼ばれます) は、NTFS ファイル システムの内部にあります。 そのため、ユーザーは新しいストリームの種類を作成できませんが、既存の NTFS ファイル システムの種類を開くことができます。 ストリーム型指定子の値は、常にドル記号 ($) 記号で始まります。 ストリームの種類の一覧については、以下を参照してください。

既定では、既定のデータ ストリームは名前なしです。 既定のデータ ストリームを完全に指定するには、"filename::$DATA" を使用します。ここで、$DATAはストリームの種類です。 これは "filename" に相当します。 ファイルの名前 付け規則を使用して、ファイル内に名前付きストリームを作成できます。 "$DATA" は有効なストリーム名であることに注意してください。 たとえば、"sample" という名前のファイルの "$DATA" という名前のストリームの完全な名前は、"sample:$DATA:$DATA" になります。 同じファイルに "bar" という名前のストリームを作成した場合、その完全な名前は "sample:bar:$DATA" になります。

1 文字の名前を持つファイルを作成して操作する場合は、ファイル名の前にピリオドの後に円記号 (.) を付けます。または、完全修飾パス名を使用します。 これを行う理由は、Windows が 1 文字のファイル名をドライブ文字として扱うことです。 相対パスを使用してドライブ文字を指定すると、コロンによってドライブ文字がパスから分離されます。 1 文字の名前がドライブ文字かファイル名かに関するあいまいさがある場合、Windows は、ドライブ文字が無効であっても、コロンの後の文字列が有効なパスである場合、ドライブ文字であると見なします。

ストリームの種類

NTFS ストリームの種類 (属性の種類コードとも呼ばれます) の一覧を次に示します。 一部のストリームの種類は NTFS に内部的であり、その形式は文書化されていません。

ストリームの種類 説明
::$ATTRIBUTE_LIST ファイルを構成し、各属性が配置されている場所を識別するすべての属性の一覧が含まれます。
::$BITMAP ディレクトリの b ツリーの空き領域を管理するためにインデックスによって使用されるビットマップ。 b ツリーは (クラスター サイズに関係なく) 4 KB のチャンクで管理され、これらのチャンクの割り当てを管理するために使用されます。 このストリームの種類は、すべてのディレクトリに存在します。
::$DATA データ ストリーム。 既定のデータ ストリームには名前がありません。 データ ストリームは、 FindFirstStreamW 関数と FindNextStreamW 関数を使用して列挙できます。
::$EA 拡張属性データを格納します。
::$EA_INFORMATION 拡張属性に関するサポート情報が含まれています。
::$FILE_NAME ファイルの名前 (Unicode 文字)。 これには、ファイルの短い名前とハード リンクが含まれます。
::$INDEX_ALLOCATION ディレクトリのストリームの種類。 大きなディレクトリのファイル名の割り当てを実装するために使用されます。 このストリームはディレクトリ自体を表し、ディレクトリのすべてのデータが含まれています。 この種類のストリームに対する変更は、NTFS 変更ジャーナルに記録されます。 $INDEX_ALLOCATION ストリームの種類の既定のストリーム名は$I 30 であるため、"DirName"、"DirName::$INDEX_ALLOCATION"、および "DirName:$I 30:$INDEX_ALLOCATION" はすべて同等です。
::$INDEX_ROOT このストリームは、インデックスの b ツリーのルートを表します。 このストリームの種類は、すべてのディレクトリに存在します。
::$LOGGED_UTILITY_STREAM ::$DATA に似ていますが、操作は NTFS 変更ジャーナルに記録されます。 EFS および トランザクション NTFS (TxF) によって使用されます。 EFS の ":StreamName:$StreamType" ペアは ":$EFS:$LOGGED_UTILITY_STREAM" で、TxF の場合は ":$TXF_DATA:$LOGGED_UTILITY_STREAM" です。
::$OBJECT_ID リンク追跡サービスのファイルを識別するために使用される 16 バイト ID。
::$REPARSE_POINT 再解析ポイント データ。

ストリームの使用

ファイルの名前付け規則

トランザクション NTFS (TxF)