exFAT 파일 시스템 사양
1 소개
exFAT 파일 시스템은 FAT 파일 시스템 제품군에서 FAT32의 후속 제품입니다. 이 사양은 exFAT 파일 시스템을 설명하고 exFAT 파일 시스템을 구현하는 데 필요한 모든 정보를 제공합니다.
1.1 디자인 목표
exFAT 파일 시스템의 가장 중요한 목표는 세 가지가 있습니다(아래 목록 참조).
FAT 기반 파일 시스템의 단순성을 유지합니다.
FAT 기반 파일 시스템의 두 가지 강점은 상대적인 단순성과 구현의 용이성입니다. 이전 제품의 명맥을 이어받은 exFAT는 비교적 간단하고 쉽게 구현할 수 있습니다.
매우 큰 파일 및 스토리지 디바이스를 사용하도록 설정합니다.
exFAT 파일 시스템은 64비트를 사용하여 파일 크기를 설명하므로 매우 큰 파일에 의존하는 애플리케이션을 사용할 수 있습니다. exFAT 파일 시스템은 32MB의 큰 클러스터를 허용하므로 매우 큰 스토리지 디바이스를 효과적으로 사용할 수 있습니다.
향후 혁신을 위한 확장성을 통합합니다.
exFAT 파일 시스템은 확장성을 디자인에 통합하여 파일 시스템이 스토리지의 혁신과 사용량의 변화를 따라가도록 합니다.
1.2 특정 용어
이 사양의 컨텍스트에서 특정 용어(표 1 참조)는 exFAT 파일 시스템의 디자인 및 구현에 있어서 특정한 의미를 지니고 있습니다.
표 1 매우 특정한 의미를 포함하는 용어의 정의
기간 | 정의 |
---|---|
해야 한다 | 이 사양은 필수 행위를 설명할 때 "해야 한다"라는 용어를 사용합니다. |
하는 것이 좋다 | 이 사양은 강력하게 권장하지만 필수는 아닌 행위를 설명할 때 "하는 것이 좋다"라는 용어를 사용합니다. |
5월 | 이 사양은 선택적 행위를 설명할 때 "할 수 있다"라는 용어를 사용합니다. |
필수 | 이 용어는 이 사양에 설명된 대로 구현이 수정해야 하고 해석해야 하는 필드 또는 구조를 설명합니다. |
선택 사항 | 이 용어는 구현이 지원하거나 지원하지 않을 수 있는 필드 또는 구조에 대해 설명합니다. 구현이 특정한 선택적 필드 또는 구조를 지원하는 경우 이 사양에 설명된 대로 필드 또는 구조를 수정하고 해석해야 합니다. |
정의되지 않음 | 이 용어는 구현이 필요에 따라 수정할 수 있고(예: 주변 필드 또는 구조를 설정할 때 0이 되도록 지우기) 특정한 의미를 지닌 것으로 해석하지 않아야 하는 필드 또는 구조 콘텐츠를 설명합니다. |
예약됨 | 이 용어는 다음에 해당하는 필드 또는 구조 콘텐츠를 설명합니다.
|
1.3 일반 머리글자어의 전체 텍스트
이 사양은 개인용 컴퓨터 업계에서 일반적으로 사용되는 머리글자어를 사용합니다(표 2 참조).
표 2 일반 머리글자어의 전체 텍스트
머리글자어 | 전체 텍스트 |
---|---|
ASCII | American Standard Code for Information Interchange |
BIOS | Basic Input Output System |
CPU | Central Processing Unit |
exFAT | extensible File Allocation Table |
FAT | File Allocation Table |
FAT12 | File Allocation Table, 12비트 클러스터 인덱스 |
FAT16 | File Allocation Table, 16비트 클러스터 인덱스 |
FAT32 | File Allocation Table, 32비트 클러스터 인덱스 |
GPT | GUID 파티션 테이블 |
GUID | Globally Unique Identifier(섹션 10.1 참조) |
INT | Interrupt |
MBR | 마스터 부트 레코드 |
texFAT | Transaction-safe exFAT |
UTC | 협정 세계시 |
1.4 기본 필드 및 구조 한정자
이 사양의 필드 및 구조에는 달리 명시되지 않는 한 다음과 같은 한정자(아래 목록 참조)가 있습니다.
부호가 없습니다.
10진수 표기법을 사용하여 값을 설명합니다(달리 명시되지 않은 경우). 이 사양은 후위 문자 "h"를 사용하여 16진수를 나타내고 GUID를 중괄호로 묶습니다.
Little-Endian 형식입니다.
문자열에 null 종료 문자가 필요하지 않습니다.
1.5 Windows CE 및 TexFAT
TexFAT는 exFAT에 대한 확장으로, 기본 파일 시스템 위에 트랜잭션에 안전한 운영 의미 체계를 추가합니다. TexFAT는 Windows CE에서 사용됩니다. TexFAT는 트랜잭션에서 사용할 두 개의 FAT 및 할당 비트맵을 필요로 합니다. 또한 안쪽 여백 설명자 및 보안 설명자를 포함하여 몇 가지 추가 구조를 정의합니다.
2 볼륨 구조
볼륨은 사용자 데이터를 저장하고 검색하는 데 필요한 모든 파일 시스템 구조 및 데이터 공간의 집합입니다. 모든 exFAT 볼륨에는 4개의 영역이 포함됩니다(표 3 참조).
표 3 볼륨 구조
하위 영역 이름 | Offset (섹터) |
크기 (섹터) |
설명 |
---|---|---|---|
메인 부팅 영역 | |||
Main Boot Sector | 0 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.1에 정의되어 있습니다. |
Main Extended Boot Sectors | 1 | 8 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.2에 정의되어 있습니다. |
Main OEM Parameters | 9 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.3에 정의되어 있습니다. |
Main Reserved | 10 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 예약되어 있습니다. |
Main Boot Checksum | 11 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.4에 정의되어 있습니다. |
백업 부팅 영역 | |||
Backup Boot Sector | 12 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.1에 정의되어 있습니다. |
Backup Extended Boot Sectors | 13 | 8 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.2에 정의되어 있습니다. |
Backup OEM Parameters | 21 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.3에 정의되어 있습니다. |
Backup Reserved | 22 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 예약되어 있습니다. |
Backup Boot Checksum | 23 | 1 | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 3.4에 정의되어 있습니다. |
FAT 영역 | |||
FAT 맞춤 | 24 | FatOffset – 24 | 이 하위 영역은 필수이며 해당 콘텐츠(있는 경우)는 정의되어 있지 않습니다. 참고: Main 및 Backup Boot Sector에는 모두 FatOffset 필드가 포함됩니다. |
첫 번째 FAT | FatOffset | FatLength | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 4.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 FatOffset 및 FatLength 필드가 포함됩니다. |
Second FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | 이 하위 영역은 필수이며 해당 콘텐츠(있는 경우)는 섹션 4.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 FatOffset, FatLength 및 NumberOfFats 필드가 포함됩니다. NumberOfFats 필드에는 1과 2 값만 포함될 수 있습니다. |
데이터 영역 | |||
Cluster Heap Alignment | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | 이 하위 영역은 필수이며 해당 콘텐츠(있는 경우)는 정의되어 있지 않습니다. 참고: Main 및 Backup Boot Sector에는 모두 FatOffset, FatLength, NumberOfFats 및 ClusterHeapOffset 필드가 포함됩니다. NumberOfFats 필드의 유효한 값은 1과 2입니다. |
Cluster Heap | ClusterHeapOffset | ClusterCount * 2SectorsPerClusterShift | 이 하위 영역은 필수이며 해당 콘텐츠는 섹션 5.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterHeapOffset, ClusterCount 및 SectorsPerClusterShift 필드가 포함됩니다. |
Excess Space | ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | 이 하위 영역은 필수이며 해당 콘텐츠(있는 경우)는 정의되어 있지 않습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterHeapOffset, ClusterCount, SectorsPerClusterShift 및 VolumeLength 필드가 포함됩니다. |
메인 및 백업 부팅 영역 3개
메인 부팅 영역은 구현이 다음을 수행할 수 있도록 필요한 모든 부트스트래핑 명령, 식별 정보 및 파일 시스템 매개 변수를 제공합니다.
exFAT 볼륨에서 컴퓨터 시스템을 부트스트랩합니다.
볼륨의 파일 시스템을 exFAT로 식별합니다.
exFAT 파일 시스템 구조의 위치를 검색합니다.
백업 부팅 영역은 메인 부팅 영역의 백업입니다. 메인 부팅 영역이 일관성 없는 상태인 경우 exFAT 볼륨의 복구를 지원합니다. 부트스트래핑 명령을 업데이트하는 경우와 같은 드문 경우를 제외하고 구현은 백업 부팅 영역의 콘텐츠를 수정하지 않는 것이 좋습니다.
3.1 Main 및 Backup Boot Sector 하위 영역
Main Boot Sector에는 exFAT 볼륨의 부트스트래핑 코드와 볼륨 구조를 설명하는 기본 exFAT 매개 변수가 포함되어 있습니다(표 4 참조). BIOS, MBR 또는 기타 부트스트래핑 에이전트가 이 섹터를 검사할 수 있으며, 그 안에 포함된 부트스트래핑 명령을 로드하고 실행할 수 있습니다.
Backup Boot Sector는 Main Boot Sector의 백업이며 구조가 동일합니다(표 4 참조). Backup Boot Sector는 복구 작업을 지원할 수 있습니다. 그러나 구현은 VolumeFlags 및 PercentInUse 필드의 콘텐츠를 부실한 것으로 처리해야 합니다.
메인 또는 Backup Boot Sector의 콘텐츠를 사용하기 전에 구현은 해당 부팅 체크섬의 유효성을 검사하고 모든 필드가 유효한 값 범위 내에 있는지 확인하는 방식으로 콘텐츠를 확인해야 합니다.
초기 형식 작업은 Main 및 Backup Boot Sector 모두의 콘텐츠를 초기화하지만 구현은 필요에 따라 이러한 섹터를 업데이트할 수 있으며 해당 부팅 체크섬도 업데이트해야 합니다. 그러나 구현은 해당 부팅 체크섬을 업데이트하지 않고 VolumeFlags 또는 PercentInUse 필드를 업데이트할 수 있습니다(체크섬에서는 이러한 두 필드를 특별히 제외함).
표 4 Main 및 Backup Boot Sector 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
JumpBoot | 0 | 3 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.1에 정의되어 있습니다. |
FileSystemName | 3 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.2에 정의되어 있습니다. |
MustBeZero | 11 | 53 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.3에 정의되어 있습니다. |
PartitionOffset | 64 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.4에 정의되어 있습니다. |
VolumeLength | 72 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.5에 정의되어 있습니다. |
FatOffset | 80 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.6에 정의되어 있습니다. |
FatLength | 84 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.7에 정의되어 있습니다. |
ClusterHeapOffset | 88 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.8에 정의되어 있습니다. |
ClusterCount | 92 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.9에 정의되어 있습니다. |
FirstClusterOfRootDirectory | 96 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.10에 정의되어 있습니다. |
VolumeSerialNumber | 100 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.11에 정의되어 있습니다. |
FileSystemRevision | 104 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.12에 정의되어 있습니다. |
VolumeFlags | 106 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.13에 정의되어 있습니다. |
BytesPerSectorShift | 108 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.14에 정의되어 있습니다. |
SectorsPerClusterShift | 109 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.15에 정의되어 있습니다. |
NumberOfFats | 110 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.16에 정의되어 있습니다. |
DriveSelect | 111 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.17에 정의되어 있습니다. |
PercentInUse | 112 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.18에 정의되어 있습니다. |
예약됨 | 113 | 7 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
BootCode | 120 | 390 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.19에 정의되어 있습니다. |
BootSignature | 510 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.20에 정의되어 있습니다. |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | 이 필드는 필수이며 해당 콘텐츠(있는 경우)는 정의되어 있지 않습니다. 참고: Main 및 Backup Boot Sector에는 모두 BytesPerSectorShift 필드가 포함됩니다. |
3.1.1 JumpBoot 필드
JumpBoot 필드에는 개인용 컴퓨터에서 일반적인 CPU에 대한 점프 명령이 포함되어야 합니다. 이 명령을 실행하면 CPU를 "점프"하여 BootCode 필드의 부트스트래핑 명령을 실행합니다.
이 필드에 유효한 값은 EBh 76h 90h(저차 바이트에서 고차 바이트 순서)입니다.
3.1.2 FileSystemName 필드
FileSystemName 필드에는 볼륨의 파일 시스템 이름이 포함되어야 합니다.
이 필드에 유효한 값은 ASCII 문자로 "EXFAT"이며, 여기에는 세 개의 후행 공백이 포함됩니다.
3.1.3 MustBeZero 필드
MustBeZero 필드는 FAT12/16/32 볼륨에서 압축된 BIOS 매개 변수 블록이 사용하는 바이트 범위와 직접 일치해야 합니다.
이 필드에 유효한 값은 0으로, FAT12/16/32 구현이 exFAT 볼륨을 실수로 탑재하지 못하도록 하는 데 도움이 됩니다.
3.1.4 PartitionOffset 필드
PartitionOffset 필드는 지정된 exFAT 볼륨을 호스트하는 파티션의 미디어 상대 섹터 오프셋을 설명해야 합니다. 이 필드는 개인용 컴퓨터에서 확장된 INT 13h를 사용한 볼륨의 부트스트래핑을 지원합니다.
이 필드에 사용할 수 있는 모든 값은 유효합니다. 그러나 값 0은 구현이 이 필드를 무시해야 함을 나타냅니다.
3.1.5 VolumeLength 필드
VolumeLength 필드는 섹터에서 지정된 exFAT 볼륨의 크기를 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 220/ 2BytesPerSectorShift. 가장 작은 볼륨이 1MB 이상인지 확인합니다.
최대 264- 1. 이 필드에서 설명할 수 있는 가장 큰 값입니다.
그러나 Excess Space 하위 영역의 크기가 0인 경우 이 필드의 가장 큰 값은 ClusterHeapOffset + (232- 11) * 2SectorsPerClusterShift입니다.
3.1.6 FatOffset 필드
FatOffset 필드는 첫 번째 FAT의 볼륨 상대 섹터 오프셋을 설명해야 합니다. 이 필드를 사용하면 구현에서 첫 번째 FAT를 기본 스토리지 미디어의 특성에 맞출 수 있습니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 24. 이는 메인 부팅 및 백업 부팅 영역에서 사용하는 섹터를 설명합니다.
최대 ClusterHeapOffset - (FatLength * NumberOfFats). 이는 Cluster Heap에서 사용하는 섹터를 설명합니다.
3.1.7 FatLength Field
FatLength 필드는 각 FAT 테이블의 길이(섹터)를 설명해야 합니다(볼륨에 최대 2개의 FAT가 포함될 수 있음).
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 (ClusterCount + 2) * 22/ 2BytesPerSectorShift(가장 가까운 정수로 올림). 이는 각 FAT가 Cluster Heap의 모든 클러스터를 설명할 수 있는 충분한 공간을 확보하도록 합니다.
최대 ClusterHeapOffset - FatOffset) / NumberOfFats(가장 가까운 정수로 버림). 이는 FAT가 Cluster Heap 앞에 있도록 합니다.
이 필드에는 Second FAT(있는 경우)도 기본 스토리지 미디어의 특성에 맞출 수 있도록 하한을 초과하는 값이 포함되어 있을 수 있습니다. FAT 자체에 필요한 것(있는 경우)을 초과하는 공간의 콘텐츠는 정의되지 않습니다.
3.1.8 ClusterHeapOffset 필드
ClusterHeapOffset 필드는 Cluster Heap의 볼륨 상대 섹터 오프셋을 설명해야 합니다. 이 필드를 사용하면 구현에서 Cluster Heap을 기본 스토리지 미디어의 특성에 맞출 수 있습니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 FatOffset + FatLength * NumberOfFats. 이는 이전의 모든 영역에서 사용하는 섹터를 설명합니다.
최대 232- 1 또는 VolumeLength - (ClusterCount * 2SectorsPerClusterShift)(둘 중 더 작은 값)
3.1.9 ClusterCount 필드
ClusterCount 필드는 Cluster Heap에 포함된 클러스터 수를 설명해야 합니다.
이 필드에 유효한 값은 다음 중 더 작은 값이어야 합니다.
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShift(가장 가까운 정수로 내림). 이는 정확히 Cluster Heap의 시작 부분과 볼륨의 끝 부분 사이에 맞을 수 있는 클러스터 수입니다.
232- 11. 이는 FAT에서 설명할 수 있는 최대 클러스터 수입니다.
ClusterCount 필드의 값에 따라 FAT의 최소 크기가 결정됩니다. 매우 큰 FAT를 방지하기 위해 구현은 SectorsPerClusterShift 필드를 통해 클러스터 크기를 늘려 Cluster Heap의 클러스터 수를 제어할 수 있습니다. 이 사양은 Cluster Heap에 224- 2개 이하의 클러스터를 권장합니다. 그러나 구현은 Cluster Heap에서 최대 232- 11개 클러스터로 볼륨을 처리할 수 있어야 합니다.
3.1.10 FirstClusterOfRootDirectory 필드
FirstClusterOfRootDirectory 필드에는 루트 디렉터리의 첫 번째 클러스터의 클러스터 인덱스가 포함되어야 합니다. 구현은 Allocation Bitmap 및 Up-case Table이 사용하는 클러스터 이후 첫 번째 정상 클러스터에 루트 디렉터리의 첫 번째 클러스터를 배치하는 데 모든 노력을 기울이는 것이 좋습니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 2. Cluster Heap에 있는 첫 번째 클러스터의 인덱스
최대 ClusterCount + 1. Cluster Heap의 마지막 클러스터 인덱스
3.1.11 VolumeSerialNumber 필드
VolumeSerialNumber 필드에는 고유한 일련 번호가 포함되어야 합니다. 이렇게 하면 구현이 서로 다른 exFAT 볼륨을 구분할 수 있습니다. 구현은 exFAT 볼륨의 서식을 지정하는 날짜와 시간을 결합하여 일련 번호를 생성해야 합니다. 날짜와 시간을 결합하여 일련 번호를 형성하는 메커니즘은 구현에 따라 다릅니다.
이 필드에 사용할 수 있는 모든 값은 유효합니다.
3.1.12 FileSystemRevision 필드
FileSystemRevision 필드는 지정된 볼륨에 있는 exFAT 구조의 주 및 부 수정 번호를 설명해야 합니다.
고차 바이트는 주 수정 버전 번호이고 저차 바이트는 부 수정 번호입니다. 예를 들어 고차 바이트에 값 01h가 포함되어 있고 저차 바이트에 값 05h가 포함된 경우 FileSystemRevision 필드는 수정 번호 1.05를 설명합니다. 마찬가지로 고차 바이트에 값 0Ah가 포함되어 있고 저차 바이트에 값 0Fh가 포함된 경우 FileSystemRevision 필드는 수정 번호 10.15를 설명합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
저차 바이트의 경우 최소 0, 고차 바이트의 경우 최소 1
저차 바이트의 경우 최대 99, 고차 바이트의 경우 최대 99
이 사양에서 설명하는 exFAT의 수정 번호는 1.00입니다. 이 사양의 구현은 주 수정 번호가 1인 exFAT 볼륨을 탑재하는 것이 좋으며, 다른 주 수정 번호가 있는 exFAT 볼륨을 탑재하지 않아야 합니다. 구현은 부 수정 번호를 따라야 하며, 작업을 수행하거나 지정된 부 수정 번호의 해당 사양에 설명되지 않은 파일 시스템 구조를 만들지 않아야 합니다.
3.1.13 VolumeFlags 필드
VolumeFlags 필드에는 exFAT 볼륨의 다양한 파일 시스템 구조 상태를 나타내는 플래그가 포함되어야 합니다(표 5 참조).
각 메인 부팅 또는 백업 부팅 영역 체크섬을 계산할 때는 구현에 이 필드가 포함되지 않습니다. Backup Boot Sector를 참조할 때 구현은 이 필드를 부실한 것으로 처리해야 합니다.
표 5 VolumeFlags 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
ActiveFat | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.13.1에 정의되어 있습니다. |
VolumeDirty | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.13.2에 정의되어 있습니다. |
MediaFailure | 2 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.13.3에 정의되어 있습니다. |
ClearToZero | 3 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.1.13.4에 정의되어 있습니다. |
예약됨 | 4 | 12 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
3.1.13.1 ActiveFat 필드
ActiveFat 필드는 다음과 같이 활성 상태이고 구현에서 사용해야 하는 FAT 및 할당 비트맵을 설명해야 합니다.
0. 이는 First FAT 및 First Allocation Bitmap이 활성화되어 있음을 의미합니다.
1. 이는 Second FAT 및 Second Allocation Bitmap이 활성화되어 있음을 의미하며 NumberOfFats 필드에 값 2가 포함된 경우에만 가능합니다.
구현은 비활성 FAT 및 할당 비트맵을 부실한 것으로 간주해야 합니다. TexFAT 인식 구현만 활성 FAT 및 할당 비트맵을 전환해야 합니다(섹션 7.1 참조).
3.1.13.2 VolumeDirty 필드
VolumeDirty 필드는 다음과 같이 볼륨이 더티인지 여부를 설명해야 합니다.
0. 이는 볼륨이 일관성 있는 상태임을 의미합니다.
1. 이는 볼륨이 일관성 없는 상태임을 의미합니다.
구현은 해결되지 않는 파일 시스템 메타데이터 불일치가 발견될 경우 이 필드의 값을 1로 설정하는 것이 좋습니다. 볼륨을 탑재할 때 이 필드의 값이 1이면 파일 시스템 메타데이터 불일치를 해결하는 구현만 이 필드의 값을 지우고 0으로 만들 수 있습니다. 이러한 구현은 파일 시스템이 일관된 상태인지 확인한 후에만 이 필드의 값을 지워서 0으로 만들어야 합니다.
볼륨을 탑재할 때 이 필드의 값이 0인 경우 구현은 파일 시스템 메타데이터를 업데이트하기 전에 이 필드를 1로 설정하고, 나중에 이 필드를 섹션 8.1에 설명된 권장 쓰기 순서와 유사하게 0이 되도록 지워야 합니다.
3.1.13.3 MediaFailure 필드
MediaFailure 필드는 다음과 같이 구현에서 미디어 오류를 발견했는지 여부를 설명해야 합니다.
0. 이는 호스팅 미디어가 오류를 보고하지 않았거나 알려진 오류가 FAT에 이미 "불량" 클러스터로 기록되었음을 의미합니다.
1. 이는 호스팅 미디어가 오류를 보고했음을 의미합니다(즉, 읽기 또는 쓰기 작업에 실패).
구현은 다음과 같은 경우 이 필드를 1로 설정하는 것이 좋습니다.
볼륨의 모든 영역에 대한 호스팅 미디어의 액세스 시도가 실패하는 경우
구현에 액세스 재시도 알고리즘(있는 경우)을 모두 사용한 경우
볼륨을 탑재할 때 이 필드의 값이 1이면 전체 볼륨에서 미디어 오류를 검사하고 모든 오류를 FAT에 "불량" 클러스터로 기록하거나 미디어 오류를 해결하는 구현은 이 필드의 값을 지우고 0으로 만들 수 있습니다.
3.1.13.4 ClearToZero 필드
ClearToZero 필드는 이 사양에서 큰 의미가 없습니다.
이 필드에 유효한 값은 다음과 같습니다.
0. 이는 특별한 의미가 없습니다.
1. 이는 구현이 파일 시스템 구조, 디렉터리 또는 파일을 수정하기 전에 이 필드를 지우고 0으로 만드는 것이 좋음을 의미합니다.
3.1.14 BytesPerSectorShift 필드
BytesPerSectorShift 필드는 log2(N)로 표현된 섹터당 바이트를 설명하는 것이 좋습니다. 여기서 N은 섹터당 바이트 수입니다. 예를 들어 섹터당 512바이트인 경우 이 필드의 값은 9입니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 9(섹터 크기 512바이트). 이는 exFAT 볼륨에 가능한 가장 작은 섹터입니다.
최대 12(섹터 크기 4096바이트). 이는 개인용 컴퓨터에서 일반적인 CPU의 메모리 페이지 크기입니다.
3.1.15 SectorsPerClusterShift 필드
SectorsPerClusterShift 필드는 log2(N)로 표현된 클러스터당 섹터를 설명해야 합니다. 여기서 N은 클러스터당 섹터 수입니다. 예를 들어 클러스터당 8개 섹터의 경우 이 필드의 값은 3입니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 0(클러스터당 1개 섹터). 이는 가능한 가장 작은 클러스터입니다.
최대 25 - BytesPerSectorShift. 이는 클러스터 크기 32MB로 평가됩니다.
3.1.16 NumberOfFats 필드
NumberOfFats 필드는 볼륨에 포함된 FAT 및 Allocation Bitmap 수를 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
1. 이는 볼륨에 First FAT 및 First Allocation Bitmap만 포함됨을 나타냅니다.
2. 이는 볼륨에 First FAT, Second FAT, First Allocation Bitmap 및 Second Allocation Bitmap이 포함됨을 나타냅니다. 이 값은 TexFAT 볼륨에만 유효합니다.
3.1.17 DriveSelect 필드
DriveSelect 필드에는 개인용 컴퓨터에서 확장된 INT 13h를 사용하여 이 볼륨의 부트스트래핑을 지원하는 확장된 INT 13h 드라이브 번호가 포함되어야 합니다.
이 필드에 사용할 수 있는 모든 값은 유효합니다. 이전 FAT 기반 파일 시스템의 유사한 필드에는 80h 값이 포함된 경우가 많습니다.
3.1.18 PercentInUse 필드
PercentInUse 필드는 할당된 Cluster Heap의 클러스터 비율을 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
0~100(포함). 이는 Cluster Heap에 할당된 클러스터의 비율로, 가장 가까운 정수로 내림됩니다.
정확히 FFh. 이는 Cluster Heap에 할당된 클러스터의 비율을 사용할 수 없음을 나타냅니다.
구현은 Cluster Heap의 클러스터 할당 변경 내용을 반영하도록 이 필드의 값을 변경하거나 FFh로 변경해야 합니다.
각 메인 부팅 또는 백업 부팅 영역 체크섬을 계산할 때는 구현에 이 필드가 포함되지 않습니다. Backup Boot Sector를 참조할 때 구현은 이 필드를 부실한 것으로 처리해야 합니다.
3.1.19 BootCode 필드
BootCode 필드에는 부트스트래핑 명령이 포함되어야 합니다. 구현은 컴퓨터 시스템을 부트스트랩하는 데 필요한 CPU 명령으로 이 필드를 채울 수 있습니다. 부트스트래핑 명령을 제공하지 않는 구현은 포맷 작업 중에 이 필드의 각 바이트를 F4h(개인용 컴퓨터에서 일반적인 CPU에 대한 중지 명령)로 초기화해야 합니다.
3.1.20 BootSignature 필드
BootSignature 필드는 지정된 섹터의 의도가 Boot Sector가 되는 것인지 여부를 설명해야 합니다.
이 필드에 유효한 값은 AA55h입니다. 이 필드의 다른 모든 값은 해당 Boot Sector를 무효화합니다. 구현은 해당 Boot Sector의 다른 필드에 따라 이전에 이 필드의 콘텐츠를 확인해야 합니다.
3.2 Main 및 Backup Extended Boot Sectors 하위 영역
Main Extended Boot Sectors의 각 섹터는 구조가 동일합니다. 그러나 각 섹터에는 고유한 부트스트래핑 명령이 포함될 수 있습니다(표 6 참조). Main Boot Sector의 부트스트래핑 명령, 대체 BIOS 구현 또는 임베디드 시스템의 펌웨어와 같은 부트스트래핑 에이전트는 이러한 섹터를 로드하고 포함된 명령을 실행할 수 있습니다.
Backup Extended Boot Sectors는 Main Extended Boot Sectors의 백업이며 구조가 동일합니다(표 6 참조).
구현은 Main 또는 Backup Extended Boot Sectors의 명령을 실행하기 전에 각 섹터의 ExtendedBootSignature 필드에 규정된 값이 포함되어 있는지 확인하여 콘텐츠를 확인하는 것이 좋습니다.
초기 형식 작업은 Main 및 Backup Extended Boot Sector 모두의 콘텐츠를 초기화하지만 구현은 필요에 따라 이러한 섹터를 업데이트할 수 있으며 해당 부팅 체크섬도 업데이트해야 합니다.
표 6 Extended Boot Sector 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.2.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 BytesPerSectorShift 필드가 포함됩니다. |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.2.2에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 BytesPerSectorShift 필드가 포함됩니다. |
3.2.1 ExtendedBootCode 필드
ExtendedBootCode 필드에는 부트스트래핑 명령이 포함되어야 합니다. 구현은 컴퓨터 시스템을 부트스트랩하는 데 필요한 CPU 명령으로 이 필드를 채울 수 있습니다. 부트스트래핑 명령을 제공하지 않는 구현은 포맷 작업 중에 이 필드의 각 바이트를 00h로 초기화해야 합니다.
3.2.2 ExtendedBootSignature 필드
ExtendedBootSignature 필드는 지정된 섹터의 의도가 Extended Boot Sector가 되는 것인지 여부를 설명해야 합니다.
이 필드에 유효한 값은 AA550000h입니다. 이 필드의 다른 모든 값은 해당 Main 또는 Backup Extended Boot Sector를 무효화합니다. 구현은 해당 Extended Boot Sector의 다른 필드에 따라 이전에 이 필드의 콘텐츠를 확인해야 합니다.
3.3 Main 및 Backup OEM Parameters 하위 영역
Main OEM Parameters 하위 영역에는 제조업체별 정보를 포함할 수 있는 10개의 매개 변수 구조가 포함되어 있습니다(표 7 참조). 10개의 매개 변수 구조는 각각 Generic Parameters 템플릿에서 파생됩니다(섹션 3.3.2 참조). 제조업체는 Generic Parameters 템플릿에서 고유한 사용자 지정 매개 변수 구조를 파생시킬 수 있습니다. 이 사양 자체는 Null Parameters(섹션 3.3.3 참조) 및 Flash Parameters(섹션 3.3.4 참조)의 두 매개 변수 구조를 정의합니다.
Backup OEM Parameters는 Main OEM Parameters의 백업이며 구조가 동일합니다(표 7 참조).
구현은 Main 또는 Backup OEM Parameters의 콘텐츠를 사용하기 전에 해당 Boot Checksum의 유효성을 검사하여 해당 콘텐츠를 확인해야 합니다.
제조업체는 Main 및 Backup OEM Parameters를 고유한 사용자 지정 매개 변수 구조(있는 경우) 및 기타 매개 변수 구조로 채우는 것이 좋습니다. 후속 포맷 작업은 Main 및 Backup OEM Parameters의 콘텐츠를 보존해야 합니다.
구현은 필요에 따라 Main 및 Backup OEM Parameters를 업데이트할 수 있으며 해당 Boot Checksum도 업데이트해야 합니다.
표 7 OEM Parameters 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
Parameters[0] | 0 | 48 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.1에 정의되어 있습니다. |
. . . |
. . . |
. . . |
. . . |
Parameters[9] | 432 | 48 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.1에 정의되어 있습니다. |
예약됨 | 480 | 2BytesPerSectorShift – 480 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 BytesPerSectorShift 필드가 포함됩니다. |
3.3.1 Parameters[0] ... Parameters[9]
이 배열의 각 Parameters 필드에는 Generic Parameters 템플릿에서 파생되는 매개 변수 구조가 포함됩니다(섹션 3.3.2 참조). 사용되지 않는 모든 Parameters 필드는 Null Parameters 구조를 포함하는 것으로 설명되어야 합니다(섹션 3.3.3 참조).
3.3.2 Generic Parameters 템플릿
Generic Parameters 템플릿은 매개 변수 구조의 기본 정의를 제공합니다(표 8 참조). 모든 매개 변수 구조는 이 템플릿에서 파생됩니다. 이 Generic Parameters 템플릿에 대한 지원은 필수입니다.
표 8 Generic Parameters 템플릿
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
ParametersGuid | 0 | 16 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.2.1에 정의되어 있습니다. |
CustomDefined | 16 | 32 | 이 필드는 필수이며 해당 콘텐츠는 이 템플릿에서 파생되는 구조가 정의합니다. |
3.3.2.1 ParametersGuid 필드
ParametersGuid 필드는 지정된 매개 변수 구조의 나머지 부분의 레이아웃을 결정하는 GUID를 설명해야 합니다.
이 필드에 사용할 수 있는 모든 값은 유효합니다. 그러나 제조업체는 이 템플릿에서 사용자 지정 매개 변수 구조를 파생시킬 때 GuidGen.exe 같은 GUID 생성 도구를 사용하여 GUID를 선택하는 것이 좋습니다.
3.3.3 Null Parameters
Null Parameters 구조는 Generic Parameters 템플릿(섹션 3.3.2 참조)에서 파생되며 사용되지 않는 Parameters 필드를 설명해야 합니다(표 9 참조). 구현은 OEM Parameters 구조를 만들거나 업데이트할 때 사용되지 않는 Parameters 필드를 Null Parameters 구조로 채워야 합니다. 또한 구현은 OEM Parameters 구조를 만들거나 업데이트할 때 배열의 끝에 Null Parameters 구조를 통합하여 다른 모든 Parameters 구조를 OEM Parameters 구조의 시작 부분에 두는 것이 좋습니다.
Null Parameters 구조에 대한 지원은 필수입니다.
표 9 Null Parameters 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
ParametersGuid | 0 | 16 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.3.1에 정의되어 있습니다. |
예약됨 | 16 | 32 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
3.3.3.1 ParametersGuid 필드
ParametersGuid 필드는 Generic Parameters 템플릿이 제공하는 정의를 준수해야 합니다(섹션 3.3.2.1 참조).
GUID 표기법으로 이 필드에 유효한 값은 {00000000-0000-0000-0000-000000000000}입니다.
3.3.4 Flash Parameters
Flash Parameter 구조는 Generic Parameters 템플릿(섹션 3.3.2 참조)에서 파생되며 플래시 미디어에 대한 매개 변수를 포함합니다(표 10 참조). 플래시 기반 스토리지 디바이스 제조업체는 Parameters 필드(Parameters[0] 필드 권장)를 이 매개 변수 구조로 채울 수 있습니다. 구현은 읽기/쓰기 중에 액세스 작업을 최적화하고 미디어 포맷 중에 파일 시스템 구조를 정렬하기 위해 Flash Parameters 구조의 정보를 사용할 수 있습니다.
Flash Parameters 구조에 대한 지원은 선택 사항입니다.
표 10 Flash Parameters 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
ParametersGuid | 0 | 16 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.1에 정의되어 있습니다. |
EraseBlockSize | 16 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.2에 정의되어 있습니다. |
PageSize | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.3에 정의되어 있습니다. |
SpareSectors | 24 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.4에 정의되어 있습니다. |
RandomAccessTime | 28 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.5에 정의되어 있습니다. |
ProgrammingTime | 32 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.6에 정의되어 있습니다. |
ReadCycle | 36 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.7에 정의되어 있습니다. |
WriteCycle | 40 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 3.3.4.8에 정의되어 있습니다. |
예약됨 | 44 | 4 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
ParametersGuid 필드를 제외한 모든 Flash Parameters 필드에 사용할 수 있는 모든 값이 유효합니다. 그러나 값 0은 필드가 실제로 의미가 없음을 나타냅니다(구현이 지정된 필드를 무시해야 함).
3.3.4.1 ParametersGuid 필드
ParametersGuid 필드는 Generic Parameters 템플릿에 제공된 정의를 준수해야 합니다(섹션 3.3.2.1 참조).
GUID 표기법으로 이 필드에 유효한 값은 {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}입니다.
3.3.4.2 EraseBlockSize 필드
EraseBlockSize 필드는 플래시 미디어 지우기 블록의 크기(바이트)를 설명해야 합니다.
3.3.4.3 PageSize 필드
PageSize 필드는 플래시 미디어 페이지의 크기(바이트)를 설명해야 합니다.
3.3.4.4 SpareSectors 필드
SpareSectors 필드는 플래시 미디어가 내부 스파링 작업에 사용할 수 있는 섹터 수를 설명해야 합니다.
3.3.4.5 RandomAccessTime 필드
RandomAccessTime 필드는 플래시 미디어의 평균 임의 액세스 시간을 나노초 단위로 설명해야 합니다.
3.3.4.6 ProgrammingTime 필드
ProgrammingTime 필드는 플래시 미디어의 평균 프로그래밍 시간을 나노초 단위로 설명해야 합니다.
3.3.4.7 ReadCycle 필드
ReadCycle 필드는 플래시 미디어의 평균 읽기 주기 시간을 나노초 단위로 설명해야 합니다.
3.3.4.8 WriteCycle 필드
WriteCycle 필드는 평균 쓰기 주기 시간을 나노초 단위로 설명해야 합니다.
3.4 Main 및 Backup Boot Checksum 하위 영역
Main 및 Backup Boot Checksum에는 각각 해당 부팅 영역에 있는 다른 모든 하위 영역의 콘텐츠에 대한 4바이트 체크섬의 반복 패턴이 포함됩니다. 해당 부팅 섹터의 VolumeFlags 및 PercentInUse 필드는 체크섬 계산에 포함되지 않습니다(그림 1 참조). 4바이트 체크섬의 반복 패턴은 해당 부팅 체크섬 하위 영역을 처음부터 끝까지 채웁니다.
구현은 Main 또는 Backup Boot 영역에서 다른 하위 영역의 콘텐츠를 사용하기 전에 해당 Boot Checksum의 유효성을 검사하여 해당 콘텐츠를 확인해야 합니다.
초기 포맷 작업은 Main 및 Backup Boot Checksum을 반복 체크섬 패턴으로 채웁니다. 구현은 해당 Boot 영역의 다른 섹터 콘텐츠가 변경되면 해당 섹터를 업데이트해야 합니다.
그림 1 부팅 체크섬 계산
UInt32 BootChecksum
(
UCHAR * Sectors, // points to an in-memory copy of the 11 sectors
USHORT BytesPerSector
)
{
UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
UInt32 Checksum = 0;
UInt32 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 106) || (Index == 107) || (Index == 112))
{
continue;
}
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
}
return Checksum;
}
4 File Allocation Table 영역
FAT(File Allocation Table) 영역에는 First FAT 하위 영역과 Second FAT 하위 영역에 각각 하나씩 최대 두 개의 FAT가 포함될 수 있습니다. NumberOfFats 필드는 이 영역에 포함된 FAT 수를 설명합니다. NumberOfFats 필드에 유효한 값은 1과 2입니다. 따라서 첫 번째 FAT 하위 영역에는 항상 FAT가 포함됩니다. NumberOfFats 필드가 2이면 Second FAT 하위 영역에도 FAT가 포함됩니다.
VolumeFlags 필드의 ActiveFat 필드는 활성 상태인 FAT를 설명합니다. Main Boot Sector의 VolumeFlags 필드만 최신 상태입니다. 구현은 활성 상태가 아닌 FAT를 부실한 것으로 처리해야 합니다. 비활성 FAT의 사용 및 FAT 간 전환은 구현에 따라 다릅니다.
4.1 First 및 Second FAT 하위 영역
FAT는 Cluster Heap의 클러스터 체인을 설명해야 합니다(표 11 참조). 클러스터 체인은 파일, 디렉터리 및 기타 파일 시스템 구조의 콘텐츠를 기록하기 위한 공간을 제공하는 일련의 클러스터입니다. FAT는 클러스터 체인을 클러스터 인덱스의 단일 연결 목록으로 나타냅니다. 처음 두 항목을 제외하고 FAT의 모든 항목은 정확히 하나의 클러스터를 나타냅니다.
표 11 파일 할당 테이블 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
FatEntry[0] | 0 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 4.1.1에 정의되어 있습니다. |
FatEntry[1] | 4 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 4.1.2에 정의되어 있습니다. |
FatEntry[2] | 8 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 4.1.3에 정의되어 있습니다. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 4.1.3에 정의되어 있습니다. ClusterCount + 1은 FFFFFFF6h를 초과할 수 없습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterCount 필드가 포함됩니다. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | 이 필드는 필수이며 해당 콘텐츠(있는 경우)는 정의되어 있지 않습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterCount, FatLength 및 BytesPerSectorShift 필드가 포함됩니다. |
4.1.1 FatEntry[0] 필드
FatEntry[0] 필드는 첫 번째 바이트(최저차 바이트)에 미디어 형식을 설명하고 나머지 3바이트에 FFh를 포함해야 합니다.
미디어 유형(첫 번째 바이트)은 F8h여야 합니다.
4.1.2 FatEntry[1] 필드
FatEntry[1] 필드는 기록 우선 순위로 인해 존재하며 관심 있는 항목을 설명하지 않습니다.
이 필드에 유효한 값은 FFFFFFFFh입니다. 구현은 이 필드를 규정된 값으로 초기화해야 하며 어떤 목적으로든 이 필드를 사용하지 않는 것이 좋습니다. 구현은 이 필드를 해석하지 않는 것이 좋으며 주변 필드를 수정하는 작업 간에 해당 콘텐츠를 보존해야 합니다.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] 필드
이 배열의 각 FatEntry 필드는 Cluster Heap의 클러스터를 나타냅니다. FatEntry[2]는 Cluster Heap의 첫 번째 클러스터를 나타내고 FatEntry[ClusterCount+1]는 Cluster Heap의 마지막 클러스터를 나타냅니다.
이러한 필드에 유효한 값의 범위는 다음과 같습니다.
2와 ClusterCount + 1(포함) 사이. 이는 지정된 클러스터 체인의 다음 FatEntry를 가리킵니다. 지정된 FatEntry는 지정된 클러스터 체인에서 앞에 오는 FatEntry를 가리키지 않아야 합니다.
정확히 FFFFFFF7h. 이는 지정된 FatEntry의 해당 클러스터를 "불량"으로 표시합니다.
정확히 FFFFFFFFh. 이는 지정된 FatEntry의 해당 클러스터를 클러스터 체인의 마지막 클러스터로 표시합니다. 이는 지정된 클러스터 체인의 마지막 FatEntry에 유일한 유효한 값입니다.
5 데이터 영역
데이터 영역에는 파일 시스템 구조, 디렉터리 및 파일에 대한 관리 공간을 제공하는 Cluster Heap이 포함됩니다.
5.1 Cluster Heap 하위 영역
Cluster Heap의 구조는 매우 간단합니다(표 12 참조). 각 연속 섹터 시리즈는 SectorsPerClusterShift 필드가 정의하는 대로 하나의 클러스터를 설명합니다. 중요한 것은 Cluster Heap의 첫 번째 클러스터에 FatEntry[2]의 인덱스에 직접 해당하는 인덱스 2가 있다는 사실입니다.
exFAT 볼륨에서 할당 비트맵(섹션 7.1.5 참조)은 모든 클러스터의 할당 상태 레코드를 유지 관리합니다. 이는 FAT가 Cluster Heap에 있는 모든 클러스터의 할당 상태 기록을 유지 관리했던 exFAT의 이전 제품(FAT12, FAT16 및 FAT32)과 큰 차이점입니다.
표 12 Cluster Heap 구조
필드 이름 | Offset (섹터) |
크기 (섹터) |
설명 |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2SectorsPerClusterShift | 이 필드는 필수이며 해당 콘텐츠는 섹션 5.1.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterHeapOffset 및 SectorsPerClusterShift 필드가 포함됩니다. |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift | 2SectorsPerClusterShift | 이 필드는 필수이며 해당 콘텐츠는 섹션 5.1.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterCount, ClusterHeapOffset 및 SectorsPerClusterShift 필드가 포함됩니다. |
5.1.1 Cluster[2] ... Cluster[ClusterCount+1] Fields
이 배열의 각 Cluster 필드는 일련의 인접한 섹터로, 해당 크기는 SectorsPerClusterShift 필드로 정의됩니다.
6 디렉터리 구조
exFAT 파일 시스템은 디렉터리 트리 접근 방식을 사용하여 Cluster Heap에 있는 파일 시스템 구조 및 파일을 관리합니다. 디렉터리는 디렉터리 트리의 부모 및 자식 간에 일대다 관계가 있습니다.
FirstClusterOfRootDirectory 필드가 참조하는 디렉터리가 디렉터리 트리의 루트입니다. 다른 모든 디렉터리는 단일 연결 방식의 루트 디렉터리에서 내림차순입니다.
각 디렉터리는 일련의 디렉터리 항목으로 구성됩니다(표 13 참조).
하나 이상의 디렉터리 항목이 파일 시스템 구조, 하위 디렉터리 또는 파일과 같은 관심 있는 항목을 설명하는 디렉터리 항목 집합으로 결합됩니다.
표 13 디렉터리 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.1에 정의되어 있습니다. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.1에 정의되어 있습니다. N(DirectoryEntry 필드 수)은 지정된 디렉터리를 포함하는 클러스터 체인의 크기(바이트 단위)를 DirectoryEntry 필드의 크기(32바이트)로 나눈 것입니다. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
이 배열의 각 DirectoryEntry 필드는 Generic DirectoryEntry 템플릿에서 파생됩니다(섹션 6.2 참조).
6.2 Generic DirectoryEntry 템플릿
Generic DirectoryEntry 템플릿은 디렉터리 항목에 대한 기본 정의를 제공합니다(표 14 참조). 모든 디렉터리 항목 구조는 이 템플릿에서 파생되며 Microsoft에서 정의한 디렉터리 항목 구조만 유효합니다(exFAT에는 섹션 7.8 및 섹션 7.9에 정의된 경우를 제외하고 제조업체에서 정의한 디렉터리 항목 구조에 대한 프로비전이 없음). Generic DirectoryEntry 템플릿을 해석하는 기능은 필수입니다.
표 14 Generic DirectoryEntry 템플릿
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.1에 정의되어 있습니다. |
CustomDefined | 1 | 19 | 이 필드는 필수이며 해당 콘텐츠는 이 템플릿에서 파생되는 구조가 정의할 수 있습니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.2에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.3에 정의되어 있습니다. |
6.2.1 EntryType 필드
EntryType 필드에는 필드 값이 정의하는 세 가지 사용 모드가 있습니다(아래 목록 참조).
00h. 이는 디렉터리 끝 마커이며 다음 조건이 적용됩니다.
지정된 DirectoryEntry의 다른 모든 필드는 실제로 예약되어 있습니다.
지정된 디렉터리의 모든 후속 디렉터리 항목도 디렉터리 끝 마커입니다.
디렉터리 끝 마커는 디렉터리 항목 집합 외부에서만 유효합니다.
구현은 필요에 따라 디렉터리 끝 마커를 덮어쓸 수 있습니다.
01h와 7Fh(포함) 사이. 이는 사용되지 않는 디렉터리 항목 마커이며 다음 조건이 적용됩니다.
지정된 DirectoryEntry의 다른 모든 필드는 실제로 정의되어 있지 않습니다.
사용되지 않는 디렉터리 항목은 디렉터리 항목 집합 외부에서만 유효합니다.
구현은 필요에 따라 사용되지 않는 디렉터리 항목을 덮어쓸 수 있습니다.
이 값 범위는 값 0이 포함된 InUse 필드(섹션 6.2.1.4 참조)에 해당합니다.
81h와 FFh(포함) 사이. 이는 일반 디렉터리 항목이며 다음 조건이 적용됩니다.
EntryType 필드의 콘텐츠(표 15 참조)에 따라 DirectoryEntry 구조의 나머지 부분의 레이아웃이 결정됩니다.
디렉터리 항목 집합 내에서는 이 값 범위만 유효합니다.
이 값 범위는 값 1이 포함된 InUse 필드(섹션 6.2.1.4 참조)에 직접 해당합니다.
InUse 필드(섹션 6.2.1.4 참조)가 잘못 수정되어 디렉터리 끝 마커가 생기는 것을 방지하기 위해 값 80h는 유효하지 않은 것으로 인식됩니다.
표 15 Generic EntryType 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
TypeCode | 0 | 5 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.1.1에 정의되어 있습니다. |
TypeImportance | 5 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.1.2에 정의되어 있습니다. |
TypeCategory | 6 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.1.3에 정의되어 있습니다. |
InUse | 7 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.2.1.4에 정의되어 있습니다. |
6.2.1.1 TypeCode 필드
TypeCode 필드는 지정된 디렉터리 항목의 특정 형식을 부분적으로 설명합니다. 이 필드와 TypeImportance 및 TypeCategory 필드(각각 섹션 6.2.1.2 및 섹션 6.2.1.3 참조)는 지정된 디렉터리 항목의 형식을 고유하게 식별합니다.
TypeImportance 및 TypeCategory 필드에 모두 값 0이 포함되어 있지 않는 한 이 필드에 사용할 수 있는 모든 값이 유효합니다. 이 경우 값 0이 이 필드에 유효하지 않습니다.
6.2.1.2 TypeImportance 필드
TypeImportance 필드는 지정된 디렉터리 항목의 중요성을 설명해야 합니다.
이 필드에 유효한 값은 다음과 같습니다.
0. 이는 지정된 디렉터리 항목이 심각함을 의미합니다(중요한 기본 및 중요한 보조 디렉터리 항목은 각각 섹션 6.3.1.2.1 및 섹션 6.4.1.2.1 참조).
1. 이는 지정된 디렉터리 항목이 무해함을 의미합니다(유용한 기본 및 유용한 보조 디렉터리 항목은 각각 섹션 6.3.1.2.2 및 섹션 6.4.1.2.2 참조).
6.2.1.3 TypeCategory 필드
TypeCategory 필드는 지정된 디렉터리 항목의 범주를 설명해야 합니다.
이 필드에 유효한 값은 다음과 같습니다.
6.2.1.4 InUse 필드
InUse 필드는 지정된 디렉터리 항목이 사용 중인지 여부를 설명해야 합니다.
이 필드에 유효한 값은 다음과 같습니다.
0. 이는 지정된 디렉터리 항목이 사용되지 않음을 의미합니다. 즉, 지정된 구조가 실제로 사용되지 않는 디렉터리 항목입니다.
1. 지정된 디렉터리 항목이 사용 중임을 의미합니다. 즉, 지정된 구조가 일반 디렉터리 항목입니다.
6.2.2 FirstCluster 필드
FirstCluster 필드에는 지정된 디렉터리 항목과 연결된 Cluster Heap에 할당된 첫 번째 클러스터의 인덱스가 포함되어야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
정확히 0. 이는 클러스터 할당이 없음을 의미합니다.
2와 ClusterCount + 1 사이. 이는 유효한 클러스터 인덱스의 범위입니다.
클러스터 할당이 파생 구조와 호환되지 않는 경우 이 템플릿에서 파생되는 구조가 FirstCluster 및 DataLength 필드를 모두 재정의할 수 있습니다.
6.2.3 DataLength 필드
DataLength 필드는 연결된 클러스터 할당에 포함된 데이터의 크기(바이트)를 설명합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 0. FirstCluster 필드에 값 0이 포함되어 있으면 이 필드의 유일한 유효한 값은 0입니다.
최대 ClusterCount * 2SectorsPerClusterShift* 2BytesPerSectorShift
파생 구조에 클러스터 할당이 가능하지 않은 경우 이 템플릿에서 파생되는 구조가 FirstCluster 및 DataLength 필드를 모두 재정의할 수 있습니다.
6.3 Generic Primary DirectoryEntry 템플릿
디렉터리 항목 집합의 첫 번째 디렉터리 항목은 기본 디렉터리 항목이어야 합니다. 디렉터리 항목 집합의 모든 후속 디렉터리 항목(있는 경우)은 보조 디렉터리 항목이어야 합니다(섹션 6.4 참조).
Generic Primary DirectoryEntry 템플릿을 해석하는 기능은 필수입니다.
모든 기본 디렉터리 항목 구조는 Generic DirectoryEntry 템플릿(섹션 6.2 참조)에서 파생되는 Generic Primary DirectoryEntry 템플릿(표 16 참조)에서 파생됩니다.
표 16 Generic Primary DirectoryEntry 템플릿
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.1에 정의되어 있습니다. |
SecondaryCount | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.2에 정의되어 있습니다. |
SetChecksum | 2 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.3에 정의되어 있습니다. |
GeneralPrimaryFlags | 4 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.4에 정의되어 있습니다. |
CustomDefined | 6 | 14 | 이 필드는 필수이며 해당 콘텐츠는 이 템플릿에서 파생되는 구조가 정의합니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.5에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.6에 정의되어 있습니다. |
6.3.1 EntryType 필드
EntryType 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1 참조).
6.3.1.1 TypeCode 필드
TypeCode 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.1 참조).
6.3.1.2 TypeImportance 필드
TypeImportance 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.2 참조).
6.3.1.2.1 중요한 기본 디렉터리 항목
중요한 기본 디렉터리 항목에는 exFAT 볼륨의 적절한 관리에 중요한 정보가 포함되어 있습니다. 루트 디렉터리에만 중요한 기본 디렉터리 항목이 포함됩니다(File 디렉터리 항목은 예외, 섹션 7.4 참조).
중요한 기본 디렉터리 항목의 정의는 주 exFAT 수정 번호와 상관 관계가 있습니다. 구현은 모든 중요한 기본 디렉터리 항목을 지원해야 하며, 이 사양에서 정의하는 중요한 기본 디렉터리 항목 구조만 기록해야 합니다.
6.3.1.2.2 유용한 기본 디렉터리 항목
유용한 기본 디렉터리 항목에는 exFAT 볼륨을 관리하는 데 유용할 수 있는 추가 정보가 포함됩니다. 모든 디렉터리에는 유용한 기본 디렉터리 항목이 포함될 수 있습니다.
유용한 기본 디렉터리 항목의 정의는 부 exFAT 수정 번호와 상관 관계가 있습니다. 이 사양 또는 후속 사양에서 정의하는 유용한 기본 디렉터리 항목에 대한 지원은 선택 사항입니다. 인식할 수 없는 유용한 기본 디렉터리 항목은 해당 디렉터리 항목 템플릿의 정의뿐만 아니라 전체 디렉터리 항목 집합을 인식할 수 없게 만듭니다.
6.3.1.3 TypeCategory 필드
TypeCategory 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.3 참조).
이 템플릿의 경우 이 필드에 유효한 값은 0이어야 합니다.
6.3.1.4 InUse 필드
InUse 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.4 참조).
6.3.2 SecondaryCount 필드
SecondaryCount 필드는 지정된 기본 디렉터리 항목 바로 다음에 있는 보조 디렉터리 항목의 수를 설명해야 합니다. 이러한 보조 디렉터리 항목은 지정된 기본 디렉터리 항목과 함께 디렉터리 항목 집합을 구성합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 0. 이는 이 기본 디렉터리 항목이 디렉터리 항목 집합의 유일한 항목임을 의미합니다.
최대 255. 이는 다음 255개의 디렉터리 항목과 이 기본 디렉터리 항목이 디렉터리 항목 집합을 구성함을 의미합니다.
이 템플릿에서 파생되는 중요한 기본 디렉터리 항목 구조는 SecondaryCount 및 SetChecksum 필드를 모두 재정의할 수 있습니다.
6.3.3 SetChecksum 필드
SetChecksum 필드에는 지정된 디렉터리 항목 집합에 있는 모든 디렉터리 항목의 체크섬이 포함되어야 합니다. 그러나 체크섬은 이 필드를 제외합니다(그림 2 참조). 구현은 지정된 디렉터리 항목 집합의 다른 디렉터리 항목을 사용하기 전에 이 필드의 콘텐츠가 유효한지 확인해야 합니다.
이 템플릿에서 파생되는 중요한 기본 디렉터리 항목 구조는 SecondaryCount 및 SetChecksum 필드를 모두 재정의할 수 있습니다.
그림 2 EntrySetChecksum 계산
UInt16 EntrySetChecksum
(
UCHAR * Entries, // points to an in-memory copy of the directory entry set
UCHAR SecondaryCount
)
{
UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
UInt16 Checksum = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 2) || (Index == 3))
{
continue;
}
Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];
}
return Checksum;
}
6.3.4 GeneralPrimaryFlags 필드
GeneralPrimaryFlags 필드에는 플래그가 포함됩니다(표 17 참조).
이 템플릿에서 파생되는 중요한 기본 디렉터리 항목 구조가 이 필드를 재정의할 수 있습니다.
표 17 Generic GeneralPrimaryFlags 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
AllocationPossible | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.4.1에 정의되어 있습니다. |
NoFatChain | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.3.4.2에 정의되어 있습니다. |
CustomDefined | 2 | 14 | 이 필드는 필수이며 이 필드는 이 템플릿에서 파생되는 구조가 정의할 수 있습니다. |
6.3.4.1 AllocationPossible 필드
AllocationPossible 필드는 지정된 디렉터리 항목의 Cluster Heap에 할당할 수 있는지 여부를 설명해야 합니다.
이 필드에 유효한 값은 다음과 같습니다.
0. 이는 클러스터의 연결된 할당이 불가능하고 FirstCluster 및 DataLength 필드가 실제로 정의되지 않음을 의미합니다(이 템플릿에서 파생되는 구조가 해당 필드를 재정의할 수 있음).
1. 이는 클러스터의 연결된 할당이 가능하고 FirstCluster 및 DataLength 필드가 정의되어 있음을 의미합니다.
6.3.4.2 NoFatChain 필드
NoFatChain 필드는 활성 FAT가 지정된 할당의 클러스터 체인을 설명하는지 여부를 나타냅니다.
이 필드에 유효한 값은 다음과 같습니다.
0. 이는 해당 FAT 항목이 할당의 클러스터 체인에 유효하고 구현에서 이를 해석해야 함을 의미합니다. AllocationPossible 필드에 값 0이 포함되어 있거나 AllocationPossible 필드에 값 1이 포함되어 있고 FirstCluster 필드에 값 0이 포함된 경우 이 필드의 유일한 유효한 값은 0입니다.
1. 연결된 할당이 하나의 연속 클러스터 시리즈임을 의미합니다. 해당 FAT 항목이 클러스터에 유효하지 않으며 구현에서 이를 해석하지 않습니다. 구현은 연결된 할당의 크기를 계산하기 위해 DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) 수식(가장 가까운 정수로 올림)을 사용할 수 있습니다.
이 템플릿에서 파생되는 중요한 기본 디렉터리 항목 구조가 GeneralPrimaryFlags 필드를 재정의하면 연결된 할당의 클러스터 체인에 해당하는 FAT 항목이 유효합니다.
6.3.5 FirstCluster 필드
FirstCluster 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.2 참조).
NoFatChain 비트가 1이면 FirstCluster는 클러스터 힙의 유효한 클러스터를 가리켜야 합니다.
이 템플릿에서 파생되는 중요한 기본 디렉터리 항목 구조는 FirstCluster 및 DataLength 필드를 재정의할 수 있습니다. 이 템플릿에서 파생되는 다른 구조는 AllocationPossible 필드에 값 0이 포함된 경우에만 FirstCluster 및 DataLength 필드를 재정의할 수 있습니다.
6.3.6 DataLength 필드
DataLength 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.3 참조).
NoFatChain 비트가 1이면 DataLength는 0이 아니어야 합니다. FirstCluster 필드가 0이면 DataLength도 0이어야 합니다.
이 템플릿에서 파생되는 중요한 기본 디렉터리 항목 구조는 FirstCluster 및 DataLength 필드를 재정의할 수 있습니다. 이 템플릿에서 파생되는 다른 구조는 AllocationPossible 필드에 값 0이 포함된 경우에만 FirstCluster 및 DataLength 필드를 재정의할 수 있습니다.
6.4 Generic Secondary DirectoryEntry 템플릿
보조 디렉터리 항목의 가장 중요한 목적은 디렉터리 항목 집합에 대한 추가 정보를 제공하는 것입니다. Generic Secondary DirectoryEntry 템플릿을 해석하는 기능은 필수입니다.
중요한 보조 디렉터리 항목 및 유용한 보조 디렉터리 항목의 정의는 부 exFAT 수정 번호와 상관 관계가 있습니다. 이 사양 또는 후속 사양에서 정의하는 중요한 보조 디렉터리 항목 또는 유용한 보조 디렉터리 항목에 대한 지원은 선택 사항입니다.
모든 보조 디렉터리 항목 구조는 Generic DirectoryEntry 템플릿(섹션 6.2 참조)에서 파생되는 Generic Secondary DirectoryEntry 템플릿(표 18 참조)에서 파생됩니다.
표 18 Generic Secondary DirectoryEntry 템플릿
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.4.1에 정의되어 있습니다. |
GeneralSecondaryFlags | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.4.2에 정의되어 있습니다. |
CustomDefined | 2 | 18 | 이 필드는 필수이며 해당 콘텐츠는 이 템플릿에서 파생되는 구조가 정의합니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.4.3에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.4.4에 정의되어 있습니다. |
6.4.1 EntryType 필드
EntryType 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1 참조).
6.4.1.1 TypeCode 필드
TypeCode 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.1 참조).
6.4.1.2 TypeImportance 필드
TypeImportance 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.2 참조).
6.4.1.2.1 중요한 보조 디렉터리 항목
중요한 보조 디렉터리 항목에는 포함된 디렉터리 항목 집합의 적절한 관리에 중요한 정보가 포함됩니다. 특정 중요한 보조 디렉터리 항목에 대한 지원은 선택 사항이지만 인식할 수 없는 중요한 디렉터리 항목은 해당 디렉터리 항목 템플릿의 정의뿐만 아니라 전체 디렉터리 항목 집합을 인식할 수 없게 만듭니다.
그러나 디렉터리 항목 집합에 구현이 인식할 수 없는 중요한 보조 디렉터리 항목이 하나 이상 포함된 경우, 구현은 디렉터리 항목 집합의 디렉터리 항목 템플릿을 최대한 해석해야 하며 디렉터리 항목 집합의 디렉터리 항목과 관련된 할당에 포함된 데이터는 해석하지 않아야 합니다(File 디렉터리 항목은 예외, 섹션 7.4 참조).
6.4.1.2.2 유용한 보조 디렉터리 항목
유용한 보조 디렉터리 항목에는 포함된 디렉터리 항목 집합을 관리하는 데 유용할 수 있는 추가 정보가 포함됩니다. 특정 유용한 보조 디렉터리 항목에 대한 지원은 선택 사항입니다. 인식할 수 없는 유용한 보조 디렉터리 항목은 전체 디렉터리 항목 집합을 인식할 수 없게 만들지 않습니다.
구현은 인식할 수 없는 유용한 보조 항목을 무시할 수 있습니다.
6.4.1.3 TypeCategory 필드
TypeCategory 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.3 참조).
이 템플릿의 경우 이 필드에 유효한 값은 1입니다.
6.4.1.4 InUse 필드
InUse 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.1.4 참조).
6.4.2 GeneralSecondaryFlags 필드
GeneralSecondaryFlags 필드에는 플래그가 포함됩니다(표 19 참조).
표 19 Generic GeneralSecondaryFlags 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
AllocationPossible | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.4.2.1에 정의되어 있습니다. |
NoFatChain | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 6.4.2.2에 정의되어 있습니다. |
CustomDefined | 2 | 6 | 이 필드는 필수이며 이 필드는 이 템플릿에서 파생되는 구조가 정의할 수 있습니다. |
6.4.2.1 AllocationPossible 필드
AllocationPossible 필드에는 Generic Primary DirectoryEntry 템플릿의 이름이 동일한 필드와 동일한 정의가 있어야 합니다(섹션 6.3.4.1 참조).
6.4.2.2 NoFatChain 필드
NoFatChain 필드에는 Generic Primary DirectoryEntry 템플릿의 이름이 동일한 필드와 동일한 정의가 있어야 합니다(섹션 6.3.4.2 참조).
6.4.3 FirstCluster 필드
FirstCluster 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.2 참조).
NoFatChain 비트가 1이면 FirstCluster는 클러스터 힙의 유효한 클러스터를 가리켜야 합니다.
6.4.4 DataLength 필드
DataLength 필드는 Generic DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.2.3 참조).
NoFatChain 비트가 1이면 DataLength는 0이 아니어야 합니다. FirstCluster 필드가 0이면 DataLength도 0이어야 합니다.
7 디렉터리 항목 정의
exFAT 파일 시스템의 수정 버전 1.00은 다음 디렉터리 항목을 정의합니다.
중요한 기본 항목
유용한 기본 항목
중요한 보조 항목
유용한 보조 항목
7.1 Allocation Bitmap 디렉터리 항목
exFAT 파일 시스템에서 FAT는 클러스터의 할당 상태를 설명하지 않습니다. 대신 할당 비트맵이 이를 설명합니다. Allocation Bitmap은 Cluster Heap(섹션 7.1.5 참조)에 있으며 루트 디렉터리에 해당하는 중요한 기본 디렉터리 항목이 있습니다(표 20 참조).
NumberOfFats 필드는 루트 디렉터리의 유효한 Allocation Bitmap 디렉터리 항목 수를 결정합니다. NumberOfFats 필드에 값 1이 포함된 경우 유효한 Allocation Bitmap 디렉터리 항목 수는 1입니다. 또한 First Allocation Bitmap을 설명하는 경우 하나의 Allocation Bitmap 디렉터리 항목만 유효합니다(섹션 7.1.2.1 참조). NumberOfFats 필드에 값 2가 포함된 경우 유효한 Allocation Bitmap 디렉터리 항목 수는 2입니다. 또한 하나는 First Allocation Bitmap을 설명하고 다른 하나는 Second Allocation Bitmap을 설명하는 경우에만 두 Allocation Bitmap 디렉터리 항목이 유효합니다.
표 20 할당 비트맵 DirectoryEntry 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.1에 정의되어 있습니다. |
BitmapFlags | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.2에 정의되어 있습니다. |
예약됨 | 2 | 18 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.3에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.4에 정의되어 있습니다. |
7.1.1 EntryType 필드
EntryType 필드는 기본 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1 참조).
7.1.1.1 TypeCode 필드
TypeCode 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.1 참조).
Allocation Bitmap 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.1.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.2 참조).
Allocation Bitmap 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.1.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.3 참조).
7.1.1.4 InUse 필드
InUse 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.4 참조).
7.1.2 BitmapFlags 필드
BitmapFlags 필드에는 플래그가 포함됩니다(표 21 참조).
표 21 BitmapFlags 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
BitmapIdentifier | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.2.1에 정의되어 있습니다. |
예약됨 | 1 | 7 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
7.1.2.1 BitmapIdentifier 필드
BitmapIdentifier 필드는 지정된 디렉터리 항목에서 설명하는 Allocation Bitmap을 나타내야 합니다. 구현은 First Allocation Bitmap을 First FAT과 함께 사용해야 하며, Second Allocation Bitmap을 Second FAT과 함께 사용해야 합니다. ActiveFat 필드는 활성 상태인 FAT 및 Allocation Bitmap을 설명합니다.
이 필드에 유효한 값은 다음과 같습니다.
0. 이는 지정된 디렉터리 항목이 First Allocation Bitmap을 설명함을 의미합니다.
1. 이는 지정된 디렉터리 항목이 Second Allocation Bitmap을 설명함을 의미하며 NumberOfFats에 값 2가 포함된 경우에만 가능합니다.
7.1.3 FirstCluster 필드
FirstCluster 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.5 참조).
이 필드에는 FAT에서 설명한 대로 Allocation Bitmap을 호스트하는 클러스터 체인의 첫 번째 클러스터 인덱스가 포함됩니다.
7.1.4 DataLength 필드
DataCluster 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.6 참조).
7.1.5 Allocation Bitmap
Allocation Bitmap은 Cluster Heap에 있는 클러스터의 할당 상태를 기록합니다. Allocation Bitmap의 각 비트는 해당 클러스터를 할당에 사용할 수 있는지 여부를 나타냅니다.
Allocation Bitmap은 가장 낮은 인덱스에서 가장 높은 인덱스까지의 클러스터를 나타냅니다(표 22 참조). 기록상의 이유로 첫 번째 클러스터에는 인덱스 2가 있습니다. 참고: 비트맵의 첫 번째 비트는 첫 번째 바이트의 최저차 비트입니다.
표 22 Allocation Bitmap 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.5.1에 정의되어 있습니다. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.1.5.1에 정의되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterCount 필드가 포함됩니다. |
예약됨 | ClusterCount | (DataLength * 8) – ClusterCount | 이 필드는 필수이며 해당 콘텐츠(있는 경우)는 예약되어 있습니다. 참고: Main 및 Backup Boot Sector에는 모두 ClusterCount 필드가 포함됩니다. |
7.1.5.1 BitmapEntry[2] ... BitmapEntry[ClusterCount+1] 필드
이 배열의 각 BitmapEntry 필드는 Cluster Heap의 클러스터를 나타냅니다. BitmapEntry[2]는 Cluster Heap의 첫 번째 클러스터를 나타내고 BitmapEntry[ClusterCount+1]는 Cluster Heap의 마지막 클러스터를 나타냅니다.
이러한 필드에 유효한 값은 다음과 같습니다.
0. 이는 할당에 사용할 수 있는 해당 클러스터를 설명합니다.
1. 이는 해당 클러스터를 할당에 사용할 수 없음을 설명합니다(클러스터 할당이 해당 클러스터를 이미 사용할 수 있거나 활성 FAT가 해당 클러스터를 불량 클러스터로 설명할 수 있음).
7.2 Up-case Table 디렉터리 항목
Up-case Table은 소문자에서 대문자로의 변환을 정의합니다. 이는 유니코드 문자를 사용하는 File Name 디렉터리 항목(섹션 7.7 참조)과 대/소문자를 구분하지 않고 대/소문자를 보존하는 exFAT 파일 시스템으로 인해 중요합니다. Up-case Table은 Cluster Heap(섹션 7.2.5 참조)에 있으며 루트 디렉터리에 해당하는 중요한 기본 디렉터리 항목이 있습니다(표 23 참조). 유효한 Up-case Table 디렉터리 항목 수는 1입니다.
Up-case Table과 파일 이름 간의 관계로 인해 구현은 포맷 작업의 결과를 제외하고 Up-case Table을 수정하지 않는 것이 좋습니다.
표 23 Up-case Table DirectoryEntry 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.2.1에 정의되어 있습니다. |
Reserved1 | 1 | 3 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
TableChecksum | 4 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.2.2에 정의되어 있습니다. |
Reserved2 | 8 | 12 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.2.3에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.2.4에 정의되어 있습니다. |
7.2.1 EntryType 필드
EntryType 필드는 기본 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1 참조).
7.2.1.1 TypeCode 필드
TypeCode 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.1 참조).
Up-case Table 디렉터리 항목의 경우 이 필드에 유효한 값은 2입니다.
7.2.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.2 참조).
Up-case Table 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.2.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.3 참조).
7.2.1.4 InUse 필드
InUse 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.4 참조).
7.2.2 TableChecksum 필드
TableChecksum 필드에는 FirstCluster 및 DataLength 필드에서 설명하는 Up-case Table의 체크섬이 포함됩니다. 구현은 Up-case Table을 사용하기 전에 이 필드의 콘텐츠가 유효한지 확인해야 합니다.
그림 3 TableChecksum 계산
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 FirstCluster 필드
FirstCluster 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.5 참조).
이 필드에는 FAT에서 설명한 대로 Up-case Table을 호스트하는 클러스터 체인의 첫 번째 클러스터 인덱스가 포함됩니다.
7.2.4 DataLength 필드
DataCluster 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.6 참조).
7.2.5 Up-case Table
Up-case Table은 일련의 유니코드 문자 매핑입니다. Up-case Table의 문자 매핑은 대문자로 변환할 유니코드 문자를 나타내는 필드 인덱스와 대문자로 변환된 유니코드 문자를 나타내는 2바이트 필드로 구성됩니다.
처음 128개의 유니코드 문자에는 필수 매핑이 있습니다(표 24 참조). 처음 128개 유니코드 문자에 대한 다른 문자 매핑이 있는 Up-case Table은 유효하지 않습니다.
필수 매핑 범위의 문자만 지원하는 구현은 나머지 Up-case Table의 매핑을 무시할 수 있습니다. 이러한 구현은 파일을 만들거나 이름을 바꾸는 경우에만 필수 매핑 범위의 문자를 사용해야 합니다(File Name 디렉터리 항목을 통해, 섹션 7.7 참조). 기존 파일 이름을 대문자로 변환하는 경우 이러한 구현은 필수가 아닌 매핑 범위의 문자를 대문자로 변환하지 않고, 대문자로 변환된 결과 파일 이름에서 이를 그대로 유지해야 합니다(즉, 부분 대문자 변환). 파일 이름을 비교할 때 이러한 구현은 필수가 아닌 매핑 범위의 유니코드 문자로만 비교 중인 이름과 다른 파일 이름을 동일하게 처리해야 합니다. 이러한 파일 이름은 잠재적으로 동일할 수 있지만 이러한 구현은 완전히 대문자로 변환된 파일 이름이 비교 중인 이름과 충돌하지 않도록 보장할 수 없습니다.
표 24 필수 처음 128자 Up-case Table 항목
테이블 인덱스 | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
(참고: ID가 아닌 대/소문자 매핑이 있는 항목은 굵게 표시됨)
유니코드 문자 공간의 많은 부분에는 대/소문자 개념이 없기 때문에(즉, "소문자" 및 "대문자"가 동일하다는 의미) 볼륨을 포맷할 때 구현은 ID 매핑 압축을 사용하여 압축된 형식으로 Up-case Table을 생성할 수 있습니다. 구현은 FFFFh 값 다음에 ID 매핑 수를 사용하여 일련의 ID 매핑을 나타내는 방식으로 Up-case Table을 압축합니다.
예를 들어 구현은 압축된 Up-case Table의 다음 8개 항목과 처음 100(64h)개 문자의 매핑을 나타낼 수 있습니다.
FFFFh, 0061h, 0041h, 0042h, 0043h
처음 두 항목은 처음 97(61h)개 문자(0000h에서 0060h까지)에 ID 매핑이 있음을 나타냅니다. 후속 문자(0061h에서 0063h까지)는 각각 0041h에서 0043h까지의 문자에 매핑됩니다.
볼륨을 포맷할 때 압축된 Up-case Table을 제공하는 기능은 선택 사항입니다. 그러나 압축되지 않은 Up-case Table과 압축된 Up-case Table을 모두 해석하는 기능은 필수입니다. TableChecksum 필드의 값은 항상 압축되거나 압축되지 않은 형식일 수 있는 Up-case Table이 볼륨에 존재하는 방식을 따릅니다.
7.2.5.1 권장되는 Up-case Table
볼륨을 포맷할 때 구현은 TableChecksum 필드의 값이 E619D30Dh인 압축된 형식(표 25 참조)으로 권장되는 Up-case Table을 기록해야 합니다.
구현이 압축되거나 압축되지 않은 자체 Up-case Table을 정의하는 경우 해당 테이블은 전체 유니코드 문자 범위(문자 코드 0000h에서 FFFFh(포함)까지)를 포함해야 합니다.
표 25 압축된 형식의 권장되는 Up-case Table
원시 오프셋 | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 Volume Label 디렉터리 항목
Volume Label은 최종 사용자가 스토리지 볼륨을 구분할 수 있게 해주는 유니코드 문자열입니다. exFAT 파일 시스템에서 Volume Label은 루트 디렉터리에 중요한 기본 디렉터리 항목으로 존재합니다(표 26 참조). 유효한 Volume Label 디렉터리 항목 수는 0에서 1까지입니다.
표 26 Volume Label DirectoryEntry 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.3.1에 정의되어 있습니다. |
CharacterCount | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.3.2에 정의되어 있습니다. |
VolumeLabel | 2 | 22 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.3.3에 정의되어 있습니다. |
예약됨 | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
7.3.1 EntryType 필드
EntryType 필드는 기본 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1 참조).
7.3.1.1 TypeCode 필드
TypeCode 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.1 참조).
Volume Label 디렉터리 항목의 경우 이 필드에 유효한 값은 3입니다.
7.3.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.2 참조).
Volume Label 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.3.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.3 참조).
7.3.1.4 InUse 필드
InUse 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.4 참조).
7.3.2 CharacterCount 필드
CharacterCount 필드에는 VolumeLabel 필드에 포함된 유니코드 문자열의 길이가 포함되어야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 0. 이는 유니코드 문자열이 0자임을 의미합니다(볼륨 레이블이 없다는 의미).
최대 11. 이는 유니코드 문자열이 11자임을 의미합니다.
7.3.3 VolumeLabel 필드
VolumeLabel 필드에는 사용자에게 친숙한 볼륨 이름인 유니코드 문자열이 포함되어야 합니다. VolumeLabel 필드에는 File Name 디렉터리 항목의 FileName 필드와 동일한 잘못된 문자 집합이 있습니다(섹션 7.7.3 참조).
7.4 File 디렉터리 항목
파일 디렉터리 항목은 파일 및 디렉터리를 설명합니다. 이는 중요한 기본 디렉터리 항목이며 모든 디렉터리에 0개 이상의 File 디렉터리 항목이 포함될 수 있습니다(표 27 참조). File 디렉터리 항목이 유효하려면 File 디렉터리 항목 바로 뒤에 정확히 하나의 Stream Extension 디렉터리 항목과 하나 이상의 File Name 디렉터리 항목이 와야 합니다(각각 섹션 7.6 및 섹션 7.7 참조).
표 27 File DirectoryEntry
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.1에 정의되어 있습니다. |
SecondaryCount | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.2에 정의되어 있습니다. |
SetChecksum | 2 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.3에 정의되어 있습니다. |
FileAttributes | 4 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.4에 정의되어 있습니다. |
Reserved1 | 6 | 2 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
CreateTimestamp | 8 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.5에 정의되어 있습니다. |
LastModifiedTimestamp | 12 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.6에 정의되어 있습니다. |
LastAccessedTimestamp | 16 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.7에 정의되어 있습니다. |
Create10msIncrement | 20 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.5에 정의되어 있습니다. |
LastModified10msIncrement | 21 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.6에 정의되어 있습니다. |
CreateUtcOffset | 22 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.5에 정의되어 있습니다. |
LastModifiedUtcOffset | 23 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.6에 정의되어 있습니다. |
LastAccessedUtcOffset | 24 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.7에 정의되어 있습니다. |
Reserved2 | 25 | 7 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
7.4.1 EntryType 필드
EntryType 필드는 기본 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1 참조).
7.4.1.1 TypeCode 필드
TypeCode 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.1 참조).
File 디렉터리 항목의 경우 이 필드에 유효한 값은 5입니다.
7.4.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.2 참조).
File 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.4.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.3 참조).
7.4.1.4 InUse 필드
InUse 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.4 참조).
7.4.2 SecondaryCount 필드
SecondaryCount 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.2 참조).
7.4.3 SetChecksum 필드
SetChecksum 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.3 참조).
7.4.4 FileAttributes 필드
FileAttributes 필드에는 플래그가 포함됩니다(표 28 참조).
표 28 FileAttributes 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
읽기 전용 | 0 | 1 | 이 필드는 필수이며 MS-DOS 정의를 준수합니다. |
숨김 | 1 | 1 | 이 필드는 필수이며 MS-DOS 정의를 준수합니다. |
시스템 | 2 | 1 | 이 필드는 필수이며 MS-DOS 정의를 준수합니다. |
Reserved1 | 3 | 1 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
디렉터리 | 4 | 1 | 이 필드는 필수이며 MS-DOS 정의를 준수합니다. |
아카이브 | 5 | 1 | 이 필드는 필수이며 MS-DOS 정의를 준수합니다. |
Reserved2 | 6 | 10 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
7.4.5 CreateTimestamp, Create10msIncrement 및 CreateUtcOffset 필드
CreateTimestamp 및 CreateTime10msIncrement 필드 조합은 지정된 파일/디렉터리가 만들어진 로컬 날짜와 시간을 설명해야 합니다. CreateUtcOffset 필드는 로컬 날짜 및 시간의 UTC와의 오프셋을 설명합니다. 구현은 지정된 디렉터리 항목 집합을 만들 때 이러한 필드를 설정해야 합니다.
이러한 필드는 Timestamp, 10msIncrement 및 UtcOffset 필드의 정의를 준수해야 합니다(각각 섹션 7.4.8, 섹션 7.4.9 및 섹션 7.4.10 참조).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement 및 LastModifiedUtcOffset 필드
LastModifiedTimestamp 및 LastModifiedTime10msIncrement 필드 조합은 지정된 Stream Extension 디렉터리 항목과 연결된 클러스터의 콘텐츠가 마지막으로 수정된 로컬 날짜 및 시간을 설명해야 합니다. LastModifiedUtcOffset 필드는 로컬 날짜 및 시간의 UTC와의 오프셋을 설명합니다. 구현은 다음 필드를 업데이트해야 합니다.
지정된 Stream Extension 디렉터리 항목과 연결된 클러스터의 콘텐츠를 수정한 후(ValidDataLength 필드에서 설명하는 시점 이후에 존재하는 콘텐츠 제외)
ValidDataLength 또는 DataLength 필드의 값을 변경할 때
이러한 필드는 Timestamp, 10msIncrement 및 UtcOffset 필드의 정의를 준수해야 합니다(각각 섹션 7.4.8, 섹션 7.4.9 및 섹션 7.4.10 참조).
7.4.7 LastAccessedTimestamp 및 LastAccessedUtcOffset 필드
LastAccessedTimestamp 필드는 지정된 Stream Extension 디렉터리 항목과 연결된 클러스터의 콘텐츠가 마지막으로 액세스된 로컬 날짜 및 시간을 설명해야 합니다. LastAccessedUtcOffset 필드는 로컬 날짜 및 시간의 UTC와의 오프셋을 설명합니다. 구현은 다음 필드를 업데이트해야 합니다.
지정된 Stream Extension 디렉터리 항목과 연결된 클러스터의 콘텐츠를 수정한 후(ValidDataLength 이후에 존재하는 콘텐츠 제외)
ValidDataLength 또는 DataLength 필드의 값을 변경할 때
구현은 지정된 Stream Extension 디렉터리 항목과 연결된 클러스터의 콘텐츠를 읽은 후 이러한 필드를 업데이트해야 합니다.
이러한 필드는 Timestamp 및 UtcOffset 필드의 정의를 준수해야 합니다(각각 섹션 7.4.8 및 섹션 7.4.10 참조).
7.4.8 Timestamp 필드
Timestamp 필드는 로컬 날짜와 시간을 2초 분해능까지 설명합니다(표 29 참조).
표 29 Timestamp 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
DoubleSeconds | 0 | 5 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.8.1에 정의되어 있습니다. |
Minute | 5 | 6 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.8.2에 정의되어 있습니다. |
시간 | 11 | 5 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.8.3에 정의되어 있습니다. |
일 | 16 | 5 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.8.4에 정의되어 있습니다. |
월 | 21 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.8.5에 정의되어 있습니다. |
Year | 25 | 7 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.8.6에 정의되어 있습니다. |
7.4.8.1 DoubleSeconds 필드
DoubleSeconds 필드는 Timestamp 필드의 초 부분을 2초 배수로 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
0. 이는 0초를 나타냅니다.
29. 이는 58초를 나타냅니다.
7.4.8.2 Minute 필드
Minute 필드는 Timestamp 필드의 분 부분을 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
0. 이는 0분을 나타냅니다.
59. 이는 59분을 나타냅니다.
7.4.8.3 Hour 필드
Hour 필드는 Timestamp 필드의 시간 부분을 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
0. 이는 00:00시간을 나타냅니다.
23. 이는 23:00시간을 나타냅니다.
7.4.8.4 Day 필드
Day 필드는 Timestamp 필드의 일 부분을 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
1. 이는 지정된 월의 첫날입니다.
지정된 월의 마지막 날(지정된 월은 유효한 일수를 정의함)
7.4.8.5 Month 필드
Month 필드는 Timestamp 필드의 월 부분을 설명해야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 1. 이는 1월을 나타냅니다.
최대 12. 이는 12월을 나타냅니다.
7.4.8.6 Year 필드
Year 필드는 1980년을 기준으로 Timestamp 필드의 연도 부분을 설명해야 합니다. 이 필드는 값이 0인 1980년과 값이 127인 2107년을 나타냅니다.
이 필드에 사용할 수 있는 모든 값은 유효합니다.
7.4.9 10msIncrement 필드
10msIncrement 필드는 해당 Timestamp 필드에 10밀리초 배수로 추가 시간 분해능을 제공해야 합니다.
이러한 필드에 유효한 값의 범위는 다음과 같습니다.
최소 0. 이는 0밀리초를 나타냅니다.
최대 199. 이는 1990밀리초를 나타냅니다.
7.4.10 UtcOffset 필드
UtcOffset 필드(표 30 참조)는 해당 Timestamp 및 10msIncrement 필드가 설명하는 로컬 날짜 및 시간에 대한 UTC의 오프셋을 설명해야 합니다. 로컬 날짜 및 시간에 대한 UTC의 오프셋에는 표준 시간대의 영향과 일광 절약 및 지역별 서머 타임 변경과 같은 기타 날짜-시간 조정이 포함됩니다.
표 30 UtcOffset 필드 구조
필드 이름 | Offset (비트) |
크기 (비트) |
설명 |
---|---|---|---|
OffsetFromUtc | 0 | 7 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.10.1에 정의되어 있습니다. |
OffsetValid | 7 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.4.10.2에 정의되어 있습니다. |
7.4.10.1 OffsetFromUtc 필드
OffsetFromUtc 필드는 관련 Timestamp 및 10msIncrement 필드에 포함된 로컬 날짜 및 시간의 UTC와의 오프셋을 설명해야 합니다. 이 필드는 15분 간격으로 UTC와의 오프셋을 설명합니다(표 31 참조).
표 31 OffsetFromUtc 필드 값의 의미
값 | 해당 하는 10진수 값(부호 있음) | 설명 |
---|---|---|
3Fh | 63 | 로컬 날짜 및 시간은 UTC + 15:45입니다. |
3Eh | 62 | 로컬 날짜 및 시간은 UTC + 15:30입니다. |
. . . |
. . . |
. . . |
01h | 1 | 로컬 날짜 및 시간은 UTC + 00:15입니다. |
00h | 0 | 로컬 날짜 및 시간은 UTC입니다. |
7Fh | -1 | 로컬 날짜 및 시간은 UTC – 00:15입니다. |
. . . |
. . . |
. . . |
41h | -63 | 로컬 날짜 및 시간은 UTC – 15:45입니다. |
40h | -64 | 로컬 날짜 및 시간은 UTC – 16:00입니다. |
위의 표에서 알 수 있듯이 이 필드에 사용 가능한 모든 값이 유효합니다. 그러나 구현은 다음과 같은 경우에만 이 필드에 값 00h를 기록해야 합니다.
로컬 날짜 및 시간이 실제로 UTC와 같은 경우. 이 경우 OffsetValid 필드의 값은 1이어야 합니다.
로컬 날짜 및 시간을 알 수 없는 경우. 이 경우 OffsetValid 필드의 값은 1이어야 하며 구현에서는 UTC를 로컬 날짜 및 시간으로 간주해야 합니다.
UTC를 알 수 없는 경우. 이 경우 OffsetValid 필드의 값은 0이어야 합니다.
로컬 날짜 및 시간의 UTC와의 오프셋이 15분 간격의 배수가 아닌 경우 구현은 OffsetFromUtc 필드에 00h를 기록해야 하며 UTC를 로컬 날짜 및 시간으로 간주해야 합니다.
7.4.10.2 OffsetValid 필드
OffsetValid 필드는 다음과 같이 OffsetFromUtc 필드의 콘텐츠가 유효한지 여부를 설명해야 합니다.
0. 이는 OffsetFromUtc 필드의 콘텐츠가 유효하지 않음을 의미합니다.
그리고 00h여야 합니다.
1. 이는 OffsetFromUtc 필드의 콘텐츠가 유효함을 의미합니다.
OffsetFromUtc 필드의 값을 계산하는 데 UTC를 사용할 수 없는 경우에만 구현에서 이 필드를 값 0으로 설정해야 합니다. 이 필드에 값 0이 포함된 경우 구현은 Timestamp 및 10msIncrement 필드를 현재 로컬 날짜 및 시간과 동일한 UTC 오프셋을 갖는 것으로 간주해야 합니다.
7.5 Volume GUID 디렉터리 항목
Volume GUID 디렉터리 항목에는 구현이 볼륨을 고유하고 프로그래밍 방식으로 구분할 수 있게 해주는 GUID가 포함됩니다. Volume GUID는 루트 디렉터리에서 유용한 기본 디렉터리 항목으로 존재합니다(표 32 참조). 유효한 Volume GUID 디렉터리 항목 수는 0에서 1까지입니다.
표 32 Volume GUID DirectoryEntry
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.5.1에 정의되어 있습니다. |
SecondaryCount | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.5.2에 정의되어 있습니다. |
SetChecksum | 2 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.5.3에 정의되어 있습니다. |
GeneralPrimaryFlags | 4 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.5.4에 정의되어 있습니다. |
VolumeGuid | 6 | 16 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.5.5에 정의되어 있습니다. |
예약됨 | 22 | 10 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
7.5.1 EntryType 필드
EntryType 필드는 기본 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1 참조).
7.5.1.1 TypeCode 필드
TypeCode 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.1 참조).
Volume GUID 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.5.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.2 참조).
Volume GUID 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.5.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.3 참조).
7.5.1.4 InUse 필드
InUse 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.1.4 참조).
7.5.2 SecondaryCount 필드
SecondaryCount 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.2 참조).
Volume GUID 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.5.3 SetChecksum 필드
SetChecksum 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.3 참조).
7.5.4 GeneralPrimaryFlags 필드
GeneralPrimaryFlags 필드는 Generic Primary DirectoryEntry 템플릿(섹션 6.3.4 참조)에 제공된 정의를 준수해야 하며 예약할 CustomDefined 필드의 콘텐츠를 정의합니다.
7.5.4.1 AllocationPossible 필드
AllocationPossible 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.4.1 참조).
Volume GUID 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.5.4.2 NoFatChain 필드
NoFatChain 필드는 Generic Primary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.3.4.2 참조).
7.5.5 VolumeGuid 필드
VolumeGuid 필드에는 지정된 볼륨을 고유하게 식별하는 GUID가 포함되어야 합니다.
이 필드에 사용할 수 있는 모든 값은 null GUID({00000000-0000-0000-0000-000000000000})를 제외하고 유효합니다.
7.6 Stream Extension 디렉터리 항목
Stream Extension 디렉터리 항목은 File 디렉터리 항목 집합의 중요한 보조 디렉터리 항목입니다(표 33 참조). File 디렉터리 항목 집합의 유효한 Stream Extension 디렉터리 항목 수는 1입니다. 또한 이 디렉터리 항목은 파일 디렉터리 항목 바로 뒤에 있는 경우에만 유효합니다.
표 33 Stream Extension DirectoryEntry
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.1에 정의되어 있습니다. |
GeneralSecondaryFlags | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.2에 정의되어 있습니다. |
Reserved1 | 2 | 1 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
NameLength | 3 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.3에 정의되어 있습니다. |
NameHash | 4 | 2 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.4에 정의되어 있습니다. |
Reserved2 | 6 | 2 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
ValidDataLength | 8 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.5에 정의되어 있습니다. |
Reserved3 | 16 | 4 | 이 필드는 필수이며 해당 콘텐츠는 예약되어 있습니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.6에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.6.7에 정의되어 있습니다. |
7.6.1 EntryType 필드
EntryType 필드는 보조 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1 참조).
7.6.1.1 TypeCode 필드
TypeCode 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.1 참조).
Stream Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.6.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.2 참조).
Stream Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.6.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.3 참조).
7.6.1.4 InUse 필드
InUse 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.4 참조).
7.6.2 GeneralSecondaryFlags 필드
GeneralSecondaryFlags 필드는 일반 보조 DirectoryEntry 템플릿(섹션 6.4.2 참조)에 제공된 정의를 준수해야 하며 예약할 CustomDefined 필드의 콘텐츠를 정의합니다.
7.6.2.1 AllocationPossible 필드
AllocationPossible 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.1 참조).
Stream Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.6.2.2 NoFatChain 필드
NoFatChain 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.2 참조).
7.6.3 NameLength 필드
NameLength 필드에는 후속 File Name 디렉터리 항목(섹션 7.7 참조)에 전체적으로 포함된 유니코드 문자열의 길이가 포함되어야 합니다.
이 필드에 유효한 값의 범위는 다음과 같습니다.
최소 1. 이는 가능한 가장 짧은 파일 이름입니다.
최대 255. 이는 가능한 가장 긴 파일 이름입니다.
NameLength 필드의 값은 File Name 디렉터리 항목 수에도 영향을 줍니다(섹션 7.7 참조).
7.6.4 NameHash 필드
NameHash 필드에는 대문자로 변환된 파일 이름의 2바이트 해시(그림 4 참조)가 포함되어야 합니다. 이렇게 하면 구현에서 이름으로 파일을 검색할 때 빠른 비교를 수행할 수 있습니다. 중요한 것은 NameHash가 불일치를 확실히 확인한다는 것입니다. 구현은 대문자로 변환된 파일 이름 비교를 통해 모든 NameHash 일치 항목을 확인해야 합니다.
그림 4 NameHash 계산
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 ValidDataLength 필드
ValidDataLength 필드는 데이터 스트림 사용자 데이터가 얼마나 길게 작성되었는지 설명합니다. 구현은 데이터 스트림에 데이터를 추가로 쓸 때 이 필드를 업데이트해야 합니다. 스토리지 미디어에서 유효한 데이터 길이와 데이터 스트림의 데이터 길이 사이의 데이터는 정의되지 않습니다. 구현은 유효한 데이터 길이를 초과하는 읽기 작업에 대해 0을 반환해야 합니다.
해당 File 디렉터리 항목에서 디렉터리를 설명하는 경우 이 필드에 유효한 유일한 값은 DataLength 필드의 값과 같습니다. 그렇지 않으면 이 필드의 유효한 값 범위는 다음과 같아야 합니다.
최소 0. 이는 사용자 데이터가 데이터 스트림에 기록되지 않았음을 의미합니다.
최대 DataLength. 이는 사용자 데이터가 데이터 스트림의 전체 길이까지 기록되었음을 의미합니다.
7.6.6 FirstCluster 필드
FirstCluster 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.3 참조).
이 필드에는 사용자 데이터를 호스트하는 데이터 스트림의 첫 번째 클러스터 인덱스가 포함되어야 합니다.
7.6.7 DataLength 필드
DataLength 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.4 참조).
해당 File 디렉터리 항목에서 디렉터리를 설명하는 경우 이 필드에 유효한 값은 연결된 할당의 전체 크기(바이트 단위)이며 0일 수 있습니다. 또한 디렉터리의 경우 이 필드의 최댓값은 256MB입니다.
7.7 File Name 디렉터리 항목
File Name 디렉터리 항목은 File 디렉터리 항목 집합의 중요한 보조 디렉터리 항목입니다(표 34 참조). File 디렉터리 항목 집합의 유효한 File Name 디렉터리 항목 수는 NameLength/15이며 가장 가까운 정수로 올림됩니다. 또한 File Name 디렉터리 항목은 Stream Extension 디렉터리 항목 바로 뒤에 연속 시리즈로 바로 오는 경우에만 유효합니다. File Name 디렉터리 항목이 결합되어 File 디렉터리 항목 집합의 파일 이름을 형성합니다.
지정된 디렉터리 항목의 모든 자식에는 고유한 File Name 디렉터리 항목 집합이 있어야 합니다. 즉, 한 디렉터리 내에서 대문자 변환 후 중복된 파일 또는 디렉터리 이름이 있을 수 없습니다.
표 34 File Name DirectoryEntry
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.7.1에 정의되어 있습니다. |
GeneralSecondaryFlags | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.7.2에 정의되어 있습니다. |
FileName | 2 | 30 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.7.3에 정의되어 있습니다. |
7.7.1 EntryType 필드
EntryType 필드는 보조 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1 참조).
7.7.1.1 TypeCode 필드
TypeCode 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.1 참조).
File Name 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.7.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.2 참조).
File Name 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.7.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.3 참조).
7.7.1.4 InUse 필드
InUse 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.4 참조).
7.7.2 GeneralSecondaryFlags 필드
GeneralSecondaryFlags 필드는 일반 보조 DirectoryEntry 템플릿(섹션 6.4.2 참조)에 제공된 정의를 준수해야 하며 예약할 CustomDefined 필드의 콘텐츠를 정의합니다.
7.7.2.1 AllocationPossible 필드
AllocationPossible 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.1 참조).
Stream Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.7.2.2 NoFatChain 필드
NoFatChain 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.2 참조).
7.7.3 FileName 필드
FileName 필드에는 파일 이름의 일부인 유니코드 문자열이 포함되어야 합니다. File 디렉터리 항목 집합에 File Name 디렉터리 항목이 있는 순서대로 FileName 필드가 연결되어 File 디렉터리 항목 집합의 파일 이름을 형성합니다. FileName 필드의 길이가 15자이고 File Name 디렉터리 항목의 최대 개수가 17개이면 연결된 최종 파일 이름의 최대 길이는 255자입니다.
연결된 파일 이름에는 다른 FAT 기반 파일 시스템과 동일한 잘못된 문자 집합이 있습니다(표 35 참조). 구현에서는 FileName 필드의 사용되지 않는 문자를 값 0000h로 설정해야 합니다.
표 35 잘못된 FileName 문자
문자 코드 | 설명 | 문자 코드 | 설명 | 문자 코드 | 설명 |
---|---|---|---|---|---|
0000h | 제어 코드 | 0001h | 제어 코드 | 0002h | 제어 코드 |
0003h | 제어 코드 | 0004h | 제어 코드 | 0005h | 제어 코드 |
0006h | 제어 코드 | 0007h | 제어 코드 | 0008h | 제어 코드 |
0009h | 제어 코드 | 000Ah | 제어 코드 | 000Bh | 제어 코드 |
000Ch | 제어 코드 | 000Dh | 제어 코드 | 000Eh | 제어 코드 |
000Fh | 제어 코드 | 0010h | 제어 코드 | 0011h | 제어 코드 |
0012h | 제어 코드 | 0013h | 제어 코드 | 0014h | 제어 코드 |
0015h | 제어 코드 | 0016h | 제어 코드 | 0017h | 제어 코드 |
0018h | 제어 코드 | 0019h | 제어 코드 | 001Ah | 제어 코드 |
001Bh | 제어 코드 | 001Ch | 제어 코드 | 001Dh | 제어 코드 |
001Eh | 제어 코드 | 001Fh | 제어 코드 | 0022h | 물음표 |
002Ah | 별표 | 002Fh | 정방향 슬래시 | 003Ah | 콜론 |
003Ch | 부등(<) 기호 | 003Eh | 부등(>) 기호 | 003Fh | 물음표 |
005Ch | 백슬래시 | 007Ch | 세로 막대 |
파일 이름 "." 및 ".."은 각각 "이 디렉터리" 및 "포함 디렉터리"라는 특별한 의미가 있습니다. 구현은 이러한 예약된 파일 이름 중 하나를 FileName 필드에 기록하지 않아야 합니다. 그러나 구현은 나열되는 디렉터리와 포함 디렉터리를 참조하기 위해 디렉터리 목록에서 이러한 두 개의 파일 이름을 생성할 수 있습니다.
구현은 파일 및 디렉터리 이름을 ASCII 문자 집합으로만 제한하는 것이 좋습니다. 그렇게 할 경우 문자 사용을 처음 128개 유니코드 항목의 유효한 문자 범위로 제한하는 것이 좋습니다. 그래도 볼륨의 유니코드에 파일 및 디렉터리 이름을 저장하고 사용자와 상호 작용할 때 ASCII/유니코드로 변환해야 합니다.
7.8 Vendor Extension 디렉터리 항목
Vendor Extension 디렉터리 항목은 File 디렉터리 항목 집합의 유용한 보조 디렉터리 항목입니다(표 36 참조). File 디렉터리 항목 집합에는 최대 보조 디렉터리 항목의 한도까지 임의 수의 Vendor Extension 디렉터리 항목이 포함될 수 있습니다(다른 보조 디렉터리 항목 수는 제외). 또한 Vendor Extension 디렉터리 항목은 필요한 Stream Extension 및 File Name 디렉터리 항목 앞에 있지 않은 경우에만 유효합니다.
Vendor Extension 디렉터리 항목을 사용하면 공급업체가 VendorGuid 필드를 통해 개별 File 디렉터리 항목 집합에 고유한 공급업체별 디렉터리 항목을 사용할 수 있습니다(표 36 참조). 공급업체는 고유한 디렉터리 항목을 사용하여 exFAT 파일 시스템을 효과적으로 확장할 수 있습니다. 공급업체는 VendorDefined 필드의 콘텐츠를 정의할 수 있습니다(표 36 참조). 공급업체 구현은 VendorDefined 필드의 콘텐츠를 유지 관리할 수 있으며 공급업체별 기능을 제공할 수 있습니다.
Vendor Extension 디렉터리 항목의 GUID를 인식하지 못하는 구현은 해당 디렉터리 항목을 인식할 수 없는 다른 유용한 보조 디렉터리 항목과 동일하게 처리해야 합니다(섹션 8.2 참조).
표 36 Vendor Extension DirectoryEntry
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.8.1에 정의되어 있습니다. |
GeneralSecondaryFlags | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.8.2에 정의되어 있습니다. |
VendorGuid | 2 | 16 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.8.3에 정의되어 있습니다. |
VendorDefined | 18 | 14 | 이 필드는 필수이며 해당 콘텐츠는 공급업체가 정의할 수 있습니다. |
7.8.1 EntryType 필드
EntryType 필드는 보조 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1 참조).
7.8.1.1 TypeCode 필드
TypeCode 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.1 참조).
Vendor Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.8.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.2 참조).
Vendor Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.8.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.3 참조).
7.8.1.4 InUse 필드
InUse 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.4 참조).
7.8.2 GeneralSecondaryFlags 필드
GeneralSecondaryFlags 필드는 일반 보조 DirectoryEntry 템플릿(섹션 6.4.2 참조)에 제공된 정의를 준수해야 하며 예약할 CustomDefined 필드의 콘텐츠를 정의합니다.
7.8.2.1 AllocationPossible 필드
AllocationPossible 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.1 참조).
Vendor Extension 디렉터리 항목의 경우 이 필드에 유효한 값은 0입니다.
7.8.2.2 NoFatChain 필드
NoFatChain 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.2 참조).
7.8.3 VendorGuid 필드
VendorGuid 필드에는 지정된 Vendor Extension을 고유하게 식별하는 GUID가 포함되어야 합니다.
이 필드에 사용할 수 있는 모든 값은 null GUID({00000000-0000-0000-0000-000000000000})를 제외하고 유효합니다. 그러나 공급업체는 확장을 정의할 때 GuidGen.exe 같은 GUID 생성 도구를 사용하여 GUID를 선택해야 합니다.
이 필드의 값은 VendorDefined 필드의 공급업체별 구조를 결정합니다.
7.9 Vendor Allocation 디렉터리 항목
Vendor Allocation 디렉터리 항목은 File 디렉터리 항목 집합의 유용한 보조 디렉터리 항목입니다(표 37 참조). File 디렉터리 항목 집합에는 최대 보조 디렉터리 항목의 한도까지 임의 수의 Vendor Allocation 디렉터리 항목이 포함될 수 있습니다(다른 보조 디렉터리 항목 수는 제외). 또한 Vendor Allocation 디렉터리 항목은 필요한 Stream Extension 및 File Name 디렉터리 항목 앞에 있지 않은 경우에만 유효합니다.
Vendor Allocation 디렉터리 항목을 사용하면 공급업체가 VendorGuid 필드를 통해 개별 File 디렉터리 항목 집합에 고유한 공급업체별 디렉터리 항목을 사용할 수 있습니다(표 37 참조). 공급업체는 고유한 디렉터리 항목을 사용하여 exFAT 파일 시스템을 효과적으로 확장할 수 있습니다. 공급업체는 연결된 클러스터(있는 경우)의 콘텐츠를 정의할 수 있습니다. 공급업체 구현은 연결된 클러스터(있는 경우)의 콘텐츠를 유지 관리할 수 있으며 공급업체별 기능을 제공할 수 있습니다.
Vendor Allocation 디렉터리 항목의 GUID를 인식하지 못하는 구현은 해당 디렉터리 항목을 인식할 수 없는 다른 유용한 보조 디렉터리 항목과 동일하게 처리해야 합니다(섹션 8.2 참조).
표 37 Vendor Allocation DirectoryEntry
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
EntryType | 0 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.9.1에 정의되어 있습니다. |
GeneralSecondaryFlags | 1 | 1 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.9.2에 정의되어 있습니다. |
VendorGuid | 2 | 16 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.9.3에 정의되어 있습니다. |
VendorDefined | 18 | 2 | 이 필드는 필수이며 해당 콘텐츠는 공급업체가 정의할 수 있습니다. |
FirstCluster | 20 | 4 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.9.4에 정의되어 있습니다. |
DataLength | 24 | 8 | 이 필드는 필수이며 해당 콘텐츠는 섹션 7.9.5에 정의되어 있습니다. |
7.9.1 EntryType 필드
EntryType 필드는 보조 DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1 참조).
7.9.1.1 TypeCode 필드
TypeCode 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.1 참조).
Vendor Allocation 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.9.1.2 TypeImportance 필드
TypeImportance 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.2 참조).
Vendor Allocation 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.9.1.3 TypeCategory 필드
TypeCategory 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.3 참조).
7.9.1.4 InUse 필드
InUse 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.1.4 참조).
7.9.2 GeneralSecondaryFlags 필드
GeneralSecondaryFlags 필드는 일반 보조 DirectoryEntry 템플릿(섹션 6.4.2 참조)에 제공된 정의를 준수해야 하며 예약할 CustomDefined 필드의 콘텐츠를 정의합니다.
7.9.2.1 AllocationPossible 필드
AllocationPossible 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.1 참조).
Vendor Allocation 디렉터리 항목의 경우 이 필드에 유효한 값은 1입니다.
7.9.2.2 NoFatChain 필드
NoFatChain 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.2.2 참조).
7.9.3 VendorGuid 필드
VendorGuid 필드에는 지정된 Vendor Allocation을 고유하게 식별하는 GUID가 포함되어야 합니다.
이 필드에 사용할 수 있는 모든 값은 null GUID({00000000-0000-0000-0000-000000000000})를 제외하고 유효합니다. 그러나 공급업체는 확장을 정의할 때 GuidGen.exe 같은 GUID 생성 도구를 사용하여 GUID를 선택해야 합니다.
이 필드의 값은 연결된 클러스터(있는 경우) 콘텐츠의 공급업체별 구조를 결정합니다.
7.9.4 FirstCluster 필드
FirstCluster 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.3 참조).
7.9.5 DataLength 필드
DataLength 필드는 Generic Secondary DirectoryEntry 템플릿에 제공된 정의를 준수해야 합니다(섹션 6.4.4 참조).
7.10 TexFAT Padding 디렉터리 항목
이 exFAT 수정 버전 1.00 파일 시스템 기본 사양은 TexFAT Padding 디렉터리 항목을 정의하지 않습니다. 그러나 형식 코드는 1이고 형식 중요도는 1입니다. 이 사양의 구현은 TexFAT Padding 디렉터리 항목을 인식할 수 없는 다른 유용한 기본 디렉터리 항목과 동일하게 처리해야 하며, TexFAT Padding 디렉터리 항목을 이동하지 않아야 합니다.
8 구현 참고 사항
8.1 권장 쓰기 순서 지정
구현은 볼륨이 전원 오류 및 기타 불가피한 오류를 최대한 복원할 수 있는지 확인하는 것이 좋습니다. 구현은 새 디렉터리 항목을 만들거나 클러스터 할당을 수정할 때 일반적으로 다음 쓰기 순서를 따르는 것이 좋습니다.
VolumeDirty 필드의 값을 1로 설정
필요한 경우 활성 FAT 업데이트
활성 할당 비트맵 업데이트
필요한 경우 디렉터리 항목 만들기 또는 업데이트
첫 번째 단계 이전의 값이 0인 경우 VolumeDirty 필드의 값이 0이 되도록 지우기
디렉터리 항목을 삭제하거나 클러스터 할당을 해제하는 경우 구현은 다음 쓰기 순서를 따라야 합니다.
VolumeDirty 필드의 값을 1로 설정
필요한 경우 디렉터리 항목 삭제 또는 업데이트
필요한 경우 활성 FAT 업데이트
활성 할당 비트맵 업데이트
첫 번째 단계 이전의 값이 0인 경우 VolumeDirty 필드의 값이 0이 되도록 지우기
8.2 인식할 수 없는 디렉터리 항목의 의미
동일한 주 수정 번호(1) 및 0보다 큰 부 수정 번호의 향후 exFAT 사양은 유용한 새 기본, 중요한 보조 및 유용한 보조 디렉터리 항목을 정의할 수 있습니다. 더 높은 주 수정 번호의 exFAT 사양만 중요한 새 기본 디렉터리 항목을 정의할 수 있습니다. exFAT 수정 버전 1.00 파일 시스템 기본 사양의 구현은 주 수정 버전 번호 1 및 부 수정 번호의 모든 exFAT 볼륨을 탑재하고 액세스할 수 있는 것이 좋습니다. 이렇게 하면 구현에서 인식할 수 없는 디렉터리 항목이 발견할 수 있는 시나리오가 발생합니다. 다음은 이러한 시나리오의 영향을 설명합니다.
루트 디렉터리에 인식할 수 없는 중요한 기본 디렉터리 항목이 있으면 볼륨이 유효하지 않게 됩니다. 루트가 아닌 디렉터리에 File 디렉터리 항목을 제외한 중요한 기본 디렉터리 항목이 있으면 호스팅 디렉터리가 유효하지 않게 됩니다.
구현은 인식할 수 없는 유용한 기본 디렉터리 항목 또는 관련 클러스터 할당을 수정하지 않아야 합니다. 그러나 구현은 디렉터리를 삭제할 때만 인식할 수 없는 유용한 기본 디렉터리 항목을 삭제하고 연결된 모든 클러스터 할당(있는 경우)을 해제해야 합니다.
구현은 인식할 수 없는 중요한 보조 디렉터리 항목 또는 관련 클러스터 할당을 수정하지 않아야 합니다. 디렉터리 항목 집합에 인식할 수 없는 중요한 보조 디렉터리 항목이 하나 이상 있으면 전체 디렉터리 항목 집합을 인식할 수 없게 됩니다. 인식할 수 없는 중요한 보조 디렉터리 항목이 하나 이상 포함된 디렉터리 항목 집합을 삭제할 경우 구현이 인식할 수 없는 중요한 보조 디렉터리 항목과 연결된 모든 클러스터 할당(있는 경우)을 해제해야 합니다. 또한 디렉터리 항목 집합이 디렉터리를 설명하는 경우 구현은 다음을 수행할 수 있습니다.
디렉터리로 트래버스
포함된 디렉터리 항목 열거
포함된 디렉터리 항목 삭제
포함된 디렉터리 항목을 다른 디렉터리로 이동
그러나 구현은 다음을 수행하지 않아야 합니다.
설명한 대로 포함된 디렉터리 항목 수정(삭제 제외)
포함된 새 디렉터리 항목 만들기
설명한 대로 포함된 디렉터리 항목 열기(트래버스 및 열거 제외)
구현은 인식할 수 없는 유용한 보조 디렉터리 항목 또는 관련 클러스터 할당을 수정하지 않아야 합니다. 구현은 인식할 수 없는 유용한 보조 디렉터리 항목을 무시하는 것이 좋습니다. 구현은 디렉터리 항목 집합을 삭제할 때 인식할 수 없는 유용한 보조 디렉터리 항목과 연결된 모든 클러스터 할당(있는 경우)을 해제해야 합니다.
9 파일 시스템 한도
9.1 섹터 크기 한도
BytesPerSectorShift 필드는 하위 및 상위 섹터 크기 한도를 정의합니다(하한: 512바이트, 상한: 4,096바이트).
9.2 클러스터 크기 한도
SectorsPerClusterShift 필드는 클러스터 크기 하한 및 상한(하한: 1개 섹터, 상한: 25 -- BytesPerSectorShift 섹터, 32MB에 해당)을 정의합니다.
9.3 Cluster Heap 크기 한도
Cluster Heap에는 최소한 루트 디렉터리, 모든 Allocation Bitmap 및 Up-case Table과 같은 기본 파일 시스템 구조를 호스트하기에 충분한 공간이 포함되어야 합니다.
Cluster Heap 크기 하한은 Cluster Heap에 상주하는 각 기본 파일 시스템 구조의 크기 하한 함수입니다. 최대한 작은 클러스터(512바이트)를 고려하더라도 각 기본 파일 시스템 구조에 필요한 클러스터는 1개 이하입니다. 따라서 하한: 2 + NumberOfFats 클러스터이며, 이는 NumberOfFats 필드 값에 따라 3개 또는 4개의 클러스터에 해당합니다.
Cluster Heap 크기 상한은 ClusterCount 필드가 정의하는 최대 클러스터 수의 간단한 함수입니다(상한: 232- 11 클러스터). 클러스터 크기에 관계없이 이러한 클러스터 힙에는 최소한 기본 파일 시스템 구조를 호스트할 수 있는 충분한 공간이 있습니다.
9.4 볼륨 크기 한도
VolumeLength 필드는 볼륨 크기 하한 및 상한을 정의합니다(하한: 220/ 2BytesPerSectorShift섹터(1MB에 해당), 상한: 264- 1 섹터(최대한 큰 섹터 크기를 감안할 때 약 64ZB에 해당)). 그러나 이 사양은 Cluster Heap에 224- 2개 이하의 클러스터를 권장합니다(섹션 3.1.9 참조). 따라서 권장되는 볼륨 상한은 ClusterHeapOffset + (224- 2) * 2SectorsPerClusterShift입니다. 최대한 큰 클러스터 크기인 32MB를 가정하고 ClusterHeapOffset이 96MB(메인 및 백업 부팅 영역과 First FAT만 있는 경우 충분한 공간)라고 가정하면 볼륨의 권장 상한은 약 512TB에 해당됩니다.
9.5 디렉터리 크기 한도
Stream Extension 디렉터리 항목의 DataLength 필드는 디렉터리 크기 하한 및 상한을 정의합니다(하한: 0바이트, 상한: 256MB). 즉, 디렉터리가 최대 8,388,608개의 디렉터리 항목을 호스트할 수 있습니다(각 디렉터리 항목이 32바이트 사용). 최대한 작은 File 디렉터리 항목 집합인 3개의 디렉터리 항목을 고려할 때 디렉터리는 최대 2,796,202개의 파일을 호스트할 수 있습니다.
10 부록
10.1 GUID(Globally Unique Identifier)
GUID는 Microsoft가 구현한 범용 고유 식별자입니다. GUID는 16진수 8개로 이루어진 그룹 1개, 각각 16진수 4개로 이루어진 그룹 3개, 16진수 12개로 이루어진 그룹 1개가 순서대로 이어진 128비트 값입니다(예: {6B29FC40-CA47-1067-B31D-00DD010662DA})(표 38 참조).
표 38 GUID 구조
필드 이름 | Offset (바이트) |
크기 (바이트) |
설명 |
---|---|---|---|
Data1 | 0 | 4 | 이 필드는 필수이며 GUID의 첫 번째 그룹에서 4바이트를 포함합니다(예제의 6B29FC40h). |
Data2 | 4 | 2 | 이 필드는 필수이며 GUID의 두 번째 그룹에서 2바이트를 포함합니다(예제의 CA47h). |
Data3 | 6 | 2 | 이 필드는 필수이며 GUID의 세 번째 그룹에서 2바이트를 포함합니다(예제의 1067h). |
Data4[0] | 8 | 1 | 이 필드는 필수이며 GUID의 네 번째 그룹에서 최상위 바이트를 포함합니다(예제의 B3h). |
Data4[1] | 9 | 1 | 이 필드는 필수이며 GUID의 네 번째 그룹에서 최하위 바이트를 포함합니다(예제의 1Dh). |
Data4[2] | 10 | 1 | 이 필드는 필수이며 GUID의 다섯 번째 그룹에서 첫 번째 바이트를 포함합니다(예제의 00h). |
Data4[3] | 11 | 1 | 이 필드는 필수이며 GUID의 다섯 번째 그룹에서 두 번째 바이트를 포함합니다(예제의 DDh). |
Data4[4] | 12 | 1 | 이 필드는 필수이며 GUID의 다섯 번째 그룹에서 세 번째 바이트를 포함합니다(예제의 01h). |
Data4[5] | 13 | 1 | 이 필드는 필수이며 GUID의 다섯 번째 그룹에서 네 번째 바이트를 포함합니다(예제의 06h). |
Data4[6] | 14 | 1 | 이 필드는 필수이며 GUID의 다섯 번째 그룹에서 다섯 번째 바이트를 포함합니다(예제의 62h). |
Data4[7] | 15 | 1 | 이 필드는 필수이며 GUID의 다섯 번째 그룹에서 여섯 번째 바이트를 포함합니다(예제의 DAh). |
10.2 파티션 테이블
광범위한 사용 시나리오 집합에서 exFAT 볼륨의 상호 운용성을 보장하려면 구현이 MBR 분할 스토리지에 파티션 유형 07h를 사용하고, GPT 분할 스토리지에 파티션 GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7}을 사용하는 것이 좋습니다.
11 문서 변경 내용 기록
표 39에서는 이 문서의 릴리스, 수정, 추가, 제거 및 설명 기록에 대해 설명합니다.
표 39 문서 변경 내용 기록
날짜 | 변경 내용 설명 |
---|---|
2008년 1월 8일 | 다음을 포함하는 기본 사양의 첫 번째 릴리스: 섹션 1, 소개 섹션 2, 섹션 3, 메인 및 백업 부팅 영역 섹션 4, File Allocation Table 영역 섹션 5, 데이터 영역 섹션 6, 디렉터리 구조 섹션 7, 디렉터리 항목 정의 섹션 8, 구현 참고 사항 섹션 9, 파일 시스템 한도 섹션 10, 부록 |
2008년 6월 8일 | 다음 변경 내용을 포함하는 기본 사양의 두 번째 릴리스: 섹션 11 추가, 섹션 7.8 및 7.9에 Vendor Extension 및 Vendor Allocation 디렉터리 항목 추가 섹션 7.2.5 및 7.2.5.1에 권장되는 Up-case Table 추가 섹션 7.4에 UtcOffset 필드 추가 및 섹션 1.3에 UTC 머리글자어 추가 표 19의 CustomDefined 필드 크기 수정 섹션 7.6.3의 유효한 NameLength 값 범위 수정 섹션 7.4의 Timestamp 및 10msIncrement 필드 수정 및 설명 섹션 3.3에서 Null Parameters의 구조 설명 섹션 6.3.4.2에서 NoFatChain 필드 값의 의미 설명 섹션 6.2.3에서 DataLength 필드 값의 의미 설명 섹션 3.1.13.2의 VolumeDirty 필드 및 섹션 8.1의 권장되는 쓰기 순서 지정 설명 섹션 3.1.13.3의 MediaFailure 필드 설명 |
2008년 10월 1일 | 다음 변경 내용을 포함하는 기본 사양의 세 번째 릴리스: 필드 설명에 해야 한다, 하는 것이 좋다 및 할 수 있다 추가 표 2 섹션 1.3에 UTC 정의 추가 TexFAT 사양 문서에 맞게 섹션 1.5 수정 섹션 6.2에서 Microsoft만 디렉터리 항목의 레이아웃을 정의할 수 있다는 제한 설명 섹션 6.3.5 및 섹션 6.4.3에 DataLength가 0이고 NoFatChain이 설정된 경우 FirstCluster 필드가 0이어야 한다는 설명 추가 섹션 7.4에서 유효한 파일 디렉터리 항목에 대한 요구 사항 설명 섹션 7.7에 고유한 파일 및 디렉터리 이름에 대한 요구 사항 추가 섹션 7.7.3의 끝에 ASCII에 대한 구현 참고 사항 추가 |
2009년 1월 1일 | 다음 변경 내용을 포함하는 기본 사양의 4번째 릴리스: Windows CE 액세스 제어 항목에 대한 참조 제거 전체 Up-case Table을 명시적으로 요구하도록 섹션 7.2.5.1에 설명 추가 |
2009년 9월 2일 | 다음 변경 내용을 포함하는 기본 사양의 5번째 릴리스: 더 원활한 PDF 변환을 위해 문서 서식 변경 |
2010년 2월 24일 | 다음 변경 내용을 포함하는 기본 사양의 6번째 릴리스: 잘못된 문장 수정: 섹션 6.3.5 및 섹션 6.4.3에서 NoFatChain 비트가 설정된 경우 유효한 할당이 있어야 한다는 것을 설명하기 위해 "DataLength가 0이고 NoFatChain이 설정된 경우 FirstCluster 필드는 0이어야 합니다." -> "NoFatChain 비트가 1이면 FirstCluster는 클러스터 힙의 유효한 클러스터를 가리켜야 합니다."로 수정 NoFatChain 비트가 설정된 경우 유효한 할당이 있어야 한다고 설명하기 위해 섹션 6.3.6 및 섹션 6.4.4에 “NoFatChain 비트가 1이면 DataLength는 0이 아니어야 합니다. FirstCluster 필드가 0이면 DataLength도 0이어야 합니다.” 추가 저작권 고지를 2010년으로 업데이트 |
2019년 8월 26일 | 다음 변경 내용을 포함하는 기본 사양의 7번째 릴리스: 다음을 포함하여 사양과 관련된 법률 용어 업데이트 Microsoft 기밀 고지 제거 Microsoft Corporation 기술 문서 사용권 계약 섹션 제거 저작권 고지를 2019년으로 업데이트 |
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기