ATTRIBUTE_RECORD_HEADER 구조체
[이 구조는 NTFS 볼륨 버전 3에만 유효하며 이후 버전에서 변경될 수 있습니다.]
특성 레코드를 나타냅니다.
구문
typedef struct _ATTRIBUTE_RECORD_HEADER {
ATTRIBUTE_TYPE_CODE TypeCode;
ULONG RecordLength;
UCHAR FormCode;
UCHAR NameLength;
USHORT NameOffset;
USHORT Flags;
USHORT Instance;
union {
struct {
ULONG ValueLength;
USHORT ValueOffset;
UCHAR Reserved[2];
} Resident;
struct {
VCN LowestVcn;
VCN HighestVcn;
USHORT MappingPairsOffset;
UCHAR Reserved[6];
LONGLONG AllocatedLength;
LONGLONG FileSize;
LONGLONG ValidDataLength;
LONGLONG TotalAllocated;
} Nonresident;
} Form;
} ATTRIBUTE_RECORD_HEADER, *PATTRIBUTE_RECORD_HEADER;
멤버
-
TypeCode
-
특성 형식 코드입니다.
값 의미 - $STANDARD_INFORMATION
- 0x10
파일 특성(예: 읽기 전용 및 보관), 타임스탬프로(예: 파일 만들기 및 마지막으로 수정됨) 및 하드 링크 수. - $ATTRIBUTE_LIST
- 0x20
각 특성이 있는 MFT 파일 레코드의 파일 참조 및 파일을 구성하는 특성 목록입니다. - $FILE_NAME
- 0x30
유니코드 문자로 된 파일의 이름입니다. - $OBJECT_ID
- 0x40
링크 추적 서비스에서 할당한 64비트 개체 식별자입니다. - $VOLUME_NAME
- 0x60
볼륨 레이블입니다. $Volume 파일에 있습니다. - $VOLUME_INFORMATION
- 0x70
볼륨 정보입니다. $Volume 파일에 있습니다. - $DATA
- 0x80
파일의 내용입니다. - $INDEX_ROOT
- 0x90
큰 디렉터리에 대한 파일 이름 할당을 구현하는 데 사용됩니다. - $INDEX_ALLOCATION
- 0xA0
큰 디렉터리에 대한 파일 이름 할당을 구현하는 데 사용됩니다. - $BITMAP
- 0xB0
큰 디렉터리에 대한 비트맵 인덱스입니다. - $REPARSE_POINT
- 0xC0
재분석 지점 데이터입니다. -
RecordLength
-
특성 레코드의 크기(바이트)입니다. 이 값은 레코드 변형에 필요한 크기를 반영하며 항상 가장 가까운 쿼드워드 경계로 반올림됩니다.
-
FormCode
-
특성 양식 코드입니다.
값 의미 - RESIDENT_FORM
- 0x00
값은 파일 레코드에 포함되며 특성 레코드 헤더 바로 뒤에 있습니다. - NONRESIDENT_FORM
- 0x01
값은 디스크의 다른 섹터에 포함됩니다. -
NameLength
-
선택적 특성 이름의 크기(문자) 또는 특성 이름이 없는 경우 0입니다. 최대 특성 이름 길이는 255자입니다.
-
NameOffset
-
특성 레코드 시작 부분의 특성 이름 오프셋(바이트)입니다. NameLength 멤버가 0이면 이 멤버는 정의되지 않습니다.
-
플래그
-
특성 플래그입니다.
-
ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF)
-
ATTRIBUTE_FLAG_SPARSE (0x8000)
-
ATTRIBUTE_FLAG_ENCRYPTED (0x4000)
-
-
인스턴스
-
파일 레코드에서 이 특성에 대한 고유 instance.
-
Form
-
FormCode 멤버가 RESIDENT_FORM 경우 공용 구조체는 상주 구조체입니다. FormCode가 NONRESIDENT_FORM 경우 공용 구조체는 비거주 구조체입니다.
-
주민
-
-
ValueLength
-
특성 값의 크기(바이트)입니다.
-
ValueOffset
-
특성 레코드의 시작부터 값에 대한 오프셋(바이트)입니다.
-
Reserved
-
예약되어 있습니다.
-
-
비거주자
-
-
LowestVcn
-
이 특성 레코드에서 다루는 가장 낮은 VCN(가상 클러스터 번호)입니다.
-
HighestVcn
-
이 특성 레코드에서 다루는 가장 높은 VCN입니다.
-
MappingPairsOffset
-
특성 레코드의 시작 부분부터 매핑 쌍 배열에 대한 오프셋(바이트)입니다. 자세한 내용은 설명 부분을 참조하세요.
-
Reserved
-
예약되어 있습니다.
-
AllocatedLength
-
할당된 파일 크기(바이트)입니다. 이 값은 클러스터 크기의 짝수 배수입니다. LowestVcn 멤버가 0이 아닌 경우 이 멤버는 유효하지 않습니다.
-
FileSize
-
파일 크기(읽을 수 있는 가장 높은 바이트+ 1)(바이트)입니다. LowestVcn이 0이 아닌 경우 이 멤버는 유효하지 않습니다.
-
ValidDataLength
-
유효한 데이터 길이(가장 높은 초기화된 바이트+ 1)(바이트)입니다. 이 값은 가장 가까운 클러스터 경계로 반올림됩니다. LowestVcn이 0이 아닌 경우 이 멤버는 유효하지 않습니다.
-
TotalAllocated
-
파일에 할당된 총계(할당된 클러스터의 합계)입니다.
-
-
설명
이 구조체에 연결된 헤더 파일이 없습니다.
이 구조 정의는 FSCTL_GET_NTFS_VOLUME_DATA 보고한 주 버전 3 및 부 버전 0 또는 1에만 유효합니다.
특성 레코드는 항상 쿼드워드 경계에 맞춰집니다.
특성이 비거주인 경우 특성 레코드 헤더에는 특성에 대한 VCN과 LCN(논리 클러스터 번호) 간의 매핑을 제공하는 검색 정보 목록이 포함됩니다. 검색 정보가 기본 파일 세그먼트에 맞지 않는 경우 외부 파일 레코드 세그먼트에 자체 저장될 수 있습니다. 여전히 하나의 외부 파일 레코드 세그먼트에 맞지 않는 경우 특성 목록에 추가 검색 정보가 필요한 특성에 대한 여러 항목을 포함하는 프로비저닝이 있습니다.
매핑 쌍 배열은 압축된 형식으로 저장되며 시스템에서 정보를 압축 해제하고 캐시한다고 가정합니다. 일련의 NextVcn/CurrentLcn 쌍으로 구성됩니다. 예를 들어 파일에 LCN 128부터 8개의 클러스터가 한 번 실행되고 파일이 LowestVcn 0에서 시작하는 경우 매핑 쌍 배열에는 NextVcn=8 및 CurrentLcn=128이라는 항목이 하나만 있습니다. 배열은 순차적으로 처리될 때 작업 변수에 대한 변경 내용을 저장하는 바이트 스트림입니다. 바이트 스트림은 다음과 같이 0으로 끝나는 삼중 스트림으로 해석됩니다.
count byte = v + (l * 16)
여기서 v 는 변경된 낮은 순서의 VCN 바이트 수이고 l 은 변경된 낮은 순서의 LCN 바이트 수입니다.
압축 해제 알고리즘은 다음과 같습니다.
- NextVcn을 로
Attribute->LowestVcn
초기화하고 CurrentLcn을 0으로 초기화합니다. - 바이트 스트림 포인터를 로 초기화합니다
(PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset
. - CurrentVcn을 NextVcn으로 설정합니다.
- 스트림에서 다음 바이트를 읽습니다. 0이면 중단합니다. 는 앞에서 설명한 대로 v 및 l 을 추출합니다.
- 다음 v 바이트를 먼저 낮은 바이트로 서명된 수량으로 해석합니다. 64비트로 확장된 로그의 압축을 풀고 NextVcn에 추가합니다.
- 다음 l 바이트를 부차적인 수량으로 해석하고 낮은 순서의 바이트를 먼저 해석합니다. 64비트로 확장된 로그의 압축을 풀고 CurrentLcn에 추가합니다. CurrentLcn이 0이면 CurrentVcn에서 NextVcn–1로의 VCN이 할당되지 않습니다.
- CurrentVcn, NextVcn 및 CurrentLcn에서 캐시된 매핑 정보를 업데이트합니다.
- 3단계로 이동합니다.
추가 정보