파일 스트림(로컬 파일 시스템)

스트림은 바이트 시퀀스입니다. NTFS 파일 시스템에서 스트림은 파일에 기록되고 특성 및 속성보다 파일에 대한 자세한 정보를 제공하는 데이터를 포함합니다. 예를 들어 검색 키워드 또는 파일을 만드는 사용자 계정의 ID를 포함하는 스트림을 만들 수 있습니다.

파일과 연결된 각 스트림에는 자체 할당 크기, 실제 크기 및 유효한 데이터 길이가 있습니다.

  • 할당 크기는 스트림에 예약된 디스크 공간의 크기입니다.
  • 실제 크기는 호출자가 사용하는 바이트 수입니다.
  • 유효한 VDL(데이터 길이)은 스트림의 할당 크기에서 초기화된 바이트 수입니다.

또한 각 스트림은 압축, 암호화 및 스파스에 대한 자체 상태를 유지 관리합니다. 파일의 FILE _ ATTRIBUTE _ SPARSE _ FILE 특성은 FindFirstFile, FindFirstFileExFindNextFile 함수에서 반환된 WIN32 FIND _ _ DATA 구조의 dwFileAttributes 멤버에 설정됩니다(스트림이 스파스된 경우). GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandleGetFileInformationByHandleEx는 스트림이 지정되지 않은 경우 기본 데이터 스트림의 스파스 상태를 반환합니다.

스트림과 연결된 파일 시간이 없습니다. 파일의 모든 스트림이 업데이트되면 파일의 파일 시간이 업데이트됩니다.

기회 잠금은 스트림별로 유지 관리됩니다. 공유 모드도 스트림별로 유지 관리됩니다. 파일에 대한 액세스 삭제가 요청되면 운영 체제는 파일의 열려 있는 모든 스트림에서 삭제 액세스를 확인합니다. 다른 프로세스가 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"입니다.

한 문자 이름이 있는 파일을 만들고 작업할 때 파일 이름에 마침표 뒤에 백슬래시 접두사를 ) 추가하거나 정규화된 경로 이름을 사용합니다. 이 작업을 수행하는 이유는 Windows 한 문자 파일 이름을 드라이브 문자로 처리하기 때문입니다. 드라이브 문자를 상대 경로 지정 하는 경우 콜론 경로에서 드라이브 문자를 구분 합니다. 한 문자 이름이 드라이브 문자인지 파일 이름인지에 대한 모호성이 있는 경우 Windows 드라이브 문자가 유효하지 않은 경우에도 콜론 다음에 오는 문자열이 유효한 경로인 경우 드라이브 문자라고 가정합니다.

스트림 형식

다음은 특성 형식 코드라고도 하는 NTFS 스트림 형식 목록입니다. 일부 스트림 형식은 NTFS 내부이며 해당 형식은 문서화되지 않았습니다.

스트림 형식 Description
::$ATTRIBUTE _ LIST 파일을 구성하고 각 특성이 있는 위치를 식별하는 모든 특성의 목록을 포함합니다.
::$BITMAP 인덱스가 디렉터리에 대한 b-트리 여유 공간을 관리하는 데 사용하는 비트맵입니다. b-트리는 클러스터 크기에 관계없이 4KB 청크로 관리되며 이러한 청크 할당을 관리하는 데 사용됩니다. 이 스트림 형식은 모든 디렉터리에 있습니다.
::$DATA 데이터 스트림. 기본 데이터 스트림에는 이름이 없습니다. FindFirstStreamWFindNextStreamW 함수를 사용하여 데이터 스트림을 열거할 수 있습니다.
::$EA 확장 특성 데이터를 포함합니다.
::$EA _ INFORMATION 확장 특성에 대한 지원 정보를 포함합니다.
::$FILE _ NAME 유니코드 문자로 된 파일의 이름입니다. 여기에는 파일의 짧은 이름과 하드 링크가 포함됩니다.
::$INDEX _ ALLOCATION 디렉터리 스트림 형식입니다. 큰 디렉터리에 대한 파일 이름 할당을 구현하는 데 사용됩니다. 이 스트림은 디렉터리 자체를 나타내며 디렉터리 데이터를 모두 포함합니다. 이 유형의 스트림에 대한 변경 내용은 NTFS 변경 저널로 기록됩니다. $INDEX ALLOCATION 스트림 형식의 기본 스트림 이름은 _ $I 30이므로 "DirName", "DirName::$INDEX _ ALLOCATION" 및 "DirName:$I 30:$INDEX _ ALLOCATION"은 모두 동일합니다.
::$INDEX _ ROOT 이 스트림은 인덱스의 b-트리 루트를 나타냅니다. 이 스트림 형식은 모든 디렉터리에 있습니다.
::$LOGGED 유틸리티 _ _ 스트림 ::$DATA 비슷하지만 작업은 NTFS 변경 저널로 기록됩니다. EFS 및 TxF(트랜잭션 NTFS)에서 사용됩니다. EFS에 대한 ":StreamName:$StreamType" 쌍은 ":$EFS:$LOGGED _ UTILITY _ STREAM"이고 TxF의 경우 ":$TXF _ DATA:$LOGGED _ UTILITY _ STREAM"입니다.
::$OBJECT _ ID 링크 추적 서비스의 파일을 식별하는 데 사용되는 16 바이트 ID입니다.
::$REPARSE _ POINT 재분석 지점 데이터입니다.

스트림 사용