spesifikasi sistem file exFAT
1 Pendahuluan
Sistem file exFAT adalah penerus FAT32 dalam keluarga FAT sistem file. Spesifikasi ini menjelaskan sistem file exFAT dan menyediakan semua informasi yang diperlukan untuk menerapkan sistem file exFAT.
1.1 Tujuan Desain
Sistem file exFAT memiliki tiga tujuan desain pusat (lihat daftar di bawah).
Pertahankan kesederhanaan sistem file berbasis FAT.
Dua kekuatan sistem file berbasis FAT adalah kesederhanaan relatif mereka dan kemudahan implementasi. Dalam semangat pendahulunya, pelaksana harus menemukan exFAT yang relatif sederhana dan mudah diimplementasikan.
Aktifkan file dan perangkat penyimpanan yang sangat besar.
Sistem file exFAT menggunakan 64 bit untuk menggambarkan ukuran file, sehingga memungkinkan aplikasi yang bergantung pada file yang sangat besar. Sistem file exFAT juga memungkinkan kluster sebesar 32MB, secara efektif memungkinkan perangkat penyimpanan yang sangat besar.
Menggabungkan ekstensibilitas untuk inovasi di masa depan.
Sistem file exFAT menggabungkan ekstensibilitas ke dalam desainnya, memungkinkan sistem file untuk mengimbangi inovasi dalam penyimpanan dan perubahan penggunaan.
1.2 Terminologi Khusus
Dalam konteks spesifikasi ini, istilah tertentu (lihat Tabel 1) membawa arti khusus untuk desain dan implementasi sistem file exFAT.
Tabel 1 Definisi Istilah yang Membawa Arti Yang Sangat Spesifik
Jangka Waktu | Definisi |
---|---|
Akan | Spesifikasi ini menggunakan istilah "harus" untuk menggambarkan perilaku yang wajib. |
Harus | Spesifikasi ini menggunakan istilah "harus" untuk menggambarkan perilaku yang sangat direkomendasikannya, tetapi tidak membuat wajib. |
Mei | Spesifikasi ini menggunakan istilah "mungkin" untuk menjelaskan perilaku yang bersifat opsional. |
Wajib | Istilah ini menjelaskan bidang atau struktur yang implementasinya harus memodifikasi dan harus menafsirkan seperti yang dijelaskan spesifikasi ini. |
Opsional | Istilah ini menjelaskan bidang atau struktur yang mungkin atau tidak didukung implementasi. Jika implementasi mendukung bidang atau struktur opsional tertentu, implementasi harus memodifikasi dan harus menafsirkan bidang atau struktur seperti yang dijelaskan spesifikasi ini. |
Tidak ditentukan | Istilah ini menjelaskan isi bidang atau struktur yang dapat dimodifikasi oleh implementasi seperlunya (yaitu jelas ke nol saat mengatur bidang atau struktur di sekitarnya) dan tidak boleh menafsirkan untuk menyimpan arti tertentu. |
Dicadangkan | Istilah ini menjelaskan isi bidang atau struktur yang implementasinya:
|
1.3 Teks Lengkap Akronim Umum
Spesifikasi ini menggunakan akronim yang umum digunakan dalam industri komputer pribadi (lihat Tabel 2).
Tabel 2 Teks Lengkap Akronim Umum
Singkatan | Teks Lengkap |
---|---|
ASCII | Kode Standar Amerika untuk Pertukaran Informasi |
BIOS | Sistem Output Input Dasar |
CPU | Unit Pemrosesan Pusat |
exFAT | Tabel Alokasi File yang dapat diperluas |
LEMAK | Tabel Alokasi File |
FAT12 | Tabel Alokasi File, indeks kluster 12-bit |
FAT16 | Tabel Alokasi File, indeks kluster 16-bit |
FAT32 | Tabel Alokasi File, indeks kluster 32-bit |
GPT | Tabel Partisi GUID |
GUID | Pengidentifikasi Unik Global (lihat Bagian 10.1) |
INT | Interupsi |
MBR | Catatan Boot Master |
texFAT | ExFAT yang aman untuk transaksi |
UTC | Waktu Universal Terkoordinasi |
1.4 Kualifikasi Bidang dan Struktur Default
Bidang dan struktur dalam spesifikasi ini memiliki kualifikasi berikut (lihat daftar di bawah), kecuali jika catatan spesifikasi sebaliknya.
Tidak ditandatangani
Gunakan notasi desimal untuk menjelaskan nilai, jika tidak disebutkan; spesifikasi ini menggunakan huruf pasca-perbaikan "h" untuk menunjukkan angka heksadesimal dan mengapit GUID dalam kurung kurawal
Dalam format little-endian
Tidak memerlukan karakter null-terminating untuk string
1.5 Windows CE dan TexFAT
TexFAT adalah ekstensi untuk exFAT yang menambahkan semantik operasional aman transaksi di atas sistem file dasar. TexFAT digunakan oleh Windows CE. TexFAT memerlukan penggunaan dua FAT dan bitmap alokasi untuk digunakan dalam transaksi. Ini juga mendefinisikan beberapa struktur tambahan termasuk deskriptor padding dan deskriptor keamanan.
2 Struktur Volume
Volume adalah sekumpulan semua struktur sistem file dan ruang data yang diperlukan untuk menyimpan dan mengambil data pengguna. Semua volume exFAT berisi empat wilayah (lihat Tabel 3).
Tabel 3 Struktur Volume
Nama Sub-wilayah | Offset (sektor) |
Ukuran (sektor) |
Komentar |
---|---|---|---|
Wilayah Boot Utama | |||
Sektor Boot Utama | 0 | 1 | Sub-wilayah ini wajib dan Bagian 3.1 mendefinisikan kontennya. |
Sektor Boot Utama yang Diperluas | 1 | 8 | Sub-wilayah ini wajib dan Bagian 3.2) mendefinisikan kontennya. |
Parameter OEM Utama | 9 | 1 | Sub-wilayah ini wajib dan Bagian 3.3 mendefinisikan kontennya. |
Cadangan Utama | 10 | 1 | Sub-wilayah ini wajib dan isinya dicadangkan. |
Checksum Boot Utama | 11 | 1 | Sub-wilayah ini wajib dan Bagian 3.4 mendefinisikan kontennya. |
Wilayah Boot Cadangan | |||
Sektor Boot Cadangan | 12 | 1 | Sub-wilayah ini wajib dan Bagian 3.1 mendefinisikan kontennya. |
Mencadangkan Sektor Boot yang Diperluas | 13 | 8 | Sub-wilayah ini wajib dan Bagian 3.2 mendefinisikan kontennya. |
Parameter OEM Cadangan | 21 | 1 | Sub-wilayah ini wajib dan Bagian 3.3 mendefinisikan kontennya. |
Cadangan Dicadangkan | 22 | 1 | Sub-wilayah ini wajib dan isinya dicadangkan. |
Checksum Boot Cadangan | 23 | 1 | Sub-wilayah ini wajib dan Bagian 3.4 mendefinisikan kontennya. |
Wilayah FAT | |||
Perataan FAT | 24 | FatOffset – 24 | Sub-wilayah ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang FatOffset. |
FAT Pertama | FatOffset | FatLength | Sub-wilayah ini wajib dan Bagian 4.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan berisi bidang FatOffset dan FatLength. |
FAT Kedua | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | Sub-wilayah ini wajib dan Bagian 4.1 mendefinisikan kontennya, jika ada. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang FatOffset, FatLength, dan NumberOfFats. Bidang NumberOfFats hanya boleh menyimpan nilai 1 dan 2. |
Wilayah Data | |||
Perataan Timbunan Kluster | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | Sub-wilayah ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang FatOffset, FatLength, NumberOfFats, dan ClusterHeapOffset. Nilai bidang NumberOfFats yang valid adalah 1 dan 2. |
Timbunan Kluster | ClusterHeapOffset | ClusterCount * 2SektorPerClusterShift | Sub-wilayah ini wajib dan Bagian 5.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterHeapOffset, ClusterCount, dan SectorsPerClusterShift. |
Ruang Berlebih | ClusterHeapOffset + ClusterCount * 2SektorPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SektorPerClusterShift) | Sub-wilayah ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterHeapOffset, ClusterCount, SectorsPerClusterShift, dan VolumeLength. |
3 Wilayah Boot Utama dan Cadangan
Wilayah Boot Utama menyediakan semua instruksi boot-strapping yang diperlukan, mengidentifikasi informasi, dan parameter sistem file untuk memungkinkan implementasi melakukan hal berikut:
Boot-strap sistem komputer dari volume exFAT.
Identifikasi sistem file pada volume sebagai exFAT.
Temukan lokasi struktur sistem file exFAT.
Wilayah Boot Cadangan adalah cadangan wilayah Boot Utama. Ini membantu pemulihan volume exFAT jika wilayah Boot Utama berada dalam keadaan tidak konsisten. Kecuali dalam keadaan yang jarang terjadi, seperti memperbarui instruksi boot-strapping, implementasi tidak boleh memodifikasi konten wilayah Boot Cadangan.
3.1 Sub-wilayah Sektor Boot Utama dan Cadangan
Sektor Boot Utama berisi kode untuk boot-strapping dari volume exFAT dan parameter exFAT mendasar yang menjelaskan struktur volume (lihat Tabel 4). BIOS, MBR, atau agen boot-strapping lainnya dapat memeriksa sektor ini dan dapat memuat dan menjalankan instruksi boot-strapping yang terkandung di dalamnya.
Sektor Boot Cadangan adalah cadangan dari Sektor Boot Utama dan memiliki struktur yang sama (lihat Tabel 4). Sektor Boot Cadangan dapat membantu operasi pemulihan; namun, implementasi harus memperlakukan isi bidang VolumeFlags dan PercentInUse sebagai basi.
Sebelum menggunakan konten Sektor Boot Utama atau Cadangan, implementasi harus memverifikasi kontennya dengan memvalidasi Boot Checksum masing-masing dan memastikan semua bidangnya berada dalam rentang nilai yang valid.
Sementara operasi format awal akan menginisialisasi konten Sektor Boot Utama dan Cadangan, implementasi dapat memperbarui sektor-sektor ini (dan juga harus memperbarui Boot Checksum masing-masing) sesuai kebutuhan. Namun, implementasi dapat memperbarui bidang VolumeFlags atau PercentInUse tanpa memperbarui Checksum Boot masing-masing (checksum secara khusus mengecualikan kedua bidang ini).
Tabel 4 Struktur Sektor Boot Utama dan Cadangan
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
JumpBoot | 0 | 3 | Bidang ini wajib dan Bagian 3.1.1 mendefinisikan kontennya. |
FileSystemName | 3 | 8 | Bidang ini wajib dan Bagian 3.1.2 mendefinisikan kontennya. |
MustBeZero | 11 | 53 | Bidang ini wajib dan Bagian 3.1.3 mendefinisikan kontennya. |
PartitionOffset | 64 | 8 | Bidang ini wajib dan Bagian 3.1.4 mendefinisikan kontennya. |
VolumeLength | 72 | 8 | Bidang ini wajib dan Bagian 3.1.5 mendefinisikan kontennya. |
FatOffset | 80 | 4 | Bidang ini wajib dan Bagian 3.1.6 mendefinisikan kontennya. |
FatLength | 84 | 4 | Bidang ini wajib dan Bagian 3.1.7 mendefinisikan kontennya. |
ClusterHeapOffset | 88 | 4 | Bidang ini wajib dan Bagian 3.1.8 mendefinisikan kontennya. |
ClusterCount | 92 | 4 | Bidang ini wajib dan Bagian 3.1.9 mendefinisikan kontennya. |
FirstClusterOfRootDirectory | 96 | 4 | Bidang ini wajib dan Bagian 3.1.10 mendefinisikan kontennya. |
VolumeSerialNumber | 100 | 4 | Bidang ini wajib dan Bagian 3.1.11 mendefinisikan kontennya. |
FileSystemRevision | 104 | 2 | Bidang ini wajib dan Bagian 3.1.12 mendefinisikan kontennya. |
VolumeFlags | 106 | 2 | Bidang ini wajib dan Bagian 3.1.13 mendefinisikan kontennya. |
BytesPerSectorShift | 108 | 1 | Bidang ini wajib dan Bagian 3.1.14 mendefinisikan kontennya. |
SectorsPerClusterShift | 109 | 1 | Bidang ini wajib dan Bagian 3.1.15 mendefinisikan kontennya. |
NumberOfFats | 110 | 1 | Bidang ini wajib dan Bagian 3.1.16 mendefinisikan kontennya. |
DrivePilih | 111 | 1 | Bidang ini wajib dan Bagian 3.1.17 mendefinisikan kontennya. |
PercentInUse | 112 | 1 | Bidang ini wajib dan Bagian 3.1.18 mendefinisikan kontennya. |
Dicadangkan | 113 | 7 | Bidang ini wajib dan isinya dicadangkan. |
BootCode | 120 | 390 | Bidang ini wajib dan Bagian 3.1.19 mendefinisikan kontennya. |
BootSignature | 510 | 2 | Bidang ini wajib dan Bagian 3.1.20 mendefinisikan kontennya. |
ExcessSpace | 512 | 2BytePerSectorShift – 512 | Bidang ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang BytesPerSectorShift. |
3.1.1 Bidang JumpBoot
Bidang JumpBoot harus berisi instruksi lompat untuk CPU yang umum di komputer pribadi, yang, ketika dieksekusi, "melompat" CPU untuk menjalankan instruksi boot-strapping di bidang BootCode.
Nilai yang valid untuk bidang ini adalah (dalam urutan byte urutan rendah ke byte urutan tinggi) EBh 76h 90h.
3.1.2 Bidang FileSystemName
Bidang FileSystemName harus berisi nama sistem file pada volume.
Nilai yang valid untuk bidang ini adalah, dalam karakter ASCII, "EXFAT ", yang mencakup tiga spasi putih berikutnya.
3.1.3 Bidang MustBeZero
Bidang MustBeZero harus secara langsung sesuai dengan rentang byte yang dikemas blok parameter BIOS yang dikonsumsi pada volume FAT12/16/32.
Nilai yang valid untuk bidang ini adalah 0, yang membantu mencegah implementasi FAT12/16/32 salah memasang volume exFAT.
3.1.4 Bidang PartitionOffset
Bidang PartitionOffset harus menggambarkan offset sektor relatif media dari partisi yang menghosting volume exFAT yang diberikan. Bidang ini membantu boot-strapping dari volume menggunakan INT 13h yang diperluas di komputer pribadi.
Semua nilai yang mungkin untuk bidang ini valid; namun, nilai 0 menunjukkan implementasi harus mengabaikan bidang ini.
3.1.5 Bidang VolumeLength
Bidang VolumeLength harus menjelaskan ukuran volume exFAT yang diberikan dalam sektor.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya2 20/ 2BytesPerSectorShift, yang memastikan volume terkecil tidak kurang dari 1MB
Paling banyak 264- 1, nilai terbesar yang dapat dijelaskan bidang ini.
Namun, jika ukuran sub-wilayah Ruang Kelebihan adalah 0, maka nilai terbesar dari bidang ini adalah ClusterHeapOffset + (232- 11) * 2SektorPerClusterShift.
3.1.6 Bidang FatOffset
Bidang FatOffset harus menggambarkan offset sektor volume-relatif dari FAT Pertama. Bidang ini memungkinkan implementasi untuk menyelaraskan FAT Pertama dengan karakteristik media penyimpanan yang mendasar.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 24, yang memperkirakan sektor yang digunakan wilayah Boot Utama dan Boot Cadangan
Paling banyak ClusterHeapOffset - (FatLength * NumberOfFats), yang memperkirakan sektor yang dikonsumsi Cluster Heap
3.1.7 Bidang FatLength
Bidang FatLength harus menggambarkan panjang, dalam sektor, dari setiap tabel FAT (volume mungkin berisi hingga dua FAT).
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya (ClusterCount + 2) * 22/ 2BytesPerSectorShiftdibulatkan ke bilangan bulat terdekat, yang memastikan setiap FAT memiliki ruang yang cukup untuk menjelaskan semua kluster dalam Tumpukan Kluster
Paling banyak (ClusterHeapOffset - FatOffset) / NumberOfFats dibulatkan ke bawah ke bilangan bulat terdekat, yang memastikan FATs ada sebelum Tumpukan Kluster
Bidang ini mungkin berisi nilai yang melebihi batas bawahnya (seperti yang dijelaskan di atas) untuk mengaktifkan FAT Kedua, jika ada, juga diselaraskan dengan karakteristik media penyimpanan yang mendasar. Isi ruang yang melebihi apa yang dibutuhkan FAT itu sendiri, jika ada, tidak terdefinisi.
3.1.8 Bidang ClusterHeapOffset
Bidang ClusterHeapOffset harus menggambarkan offset sektor volume-relatif dari Cluster Heap. Bidang ini memungkinkan implementasi untuk menyelaraskan Tumpukan Kluster dengan karakteristik media penyimpanan yang mendasar.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya FatOffset + FatLength * NumberOfFats, untuk memperkirakan sektor yang dikonsumsi semua wilayah sebelumnya
Paling banyak 232- 1 atau VolumeLength - (ClusterCount * 2SektorPerClusterShift), perhitungan mana pun yang lebih sedikit
3.1.9 Bidang ClusterCount
Bidang ClusterCount harus menjelaskan jumlah kluster yang dikandung Oleh Cluster Heap.
Nilai yang valid untuk bidang ini akan menjadi lebih rendah dari yang berikut ini:
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftdibulatkan ke bilangan bulat terdekat, yang merupakan jumlah kluster yang tepat yang dapat pas antara awal Tumpukan Kluster dan akhir volume
232- 11, yang merupakan jumlah maksimum kluster yang dapat dijelaskan FAT
Nilai bidang ClusterCount menentukan ukuran minimum FAT. Untuk menghindari FATs yang sangat besar, implementasi dapat mengontrol jumlah kluster dalam Tumpukan Kluster dengan meningkatkan ukuran kluster (melalui bidang SectorsPerClusterShift). Spesifikasi ini merekomendasikan tidak lebih dari2 kluster 24- 2 di Cluster Heap. Namun, implementasi harus dapat menangani volume dengan hingga 2kluster 32- 11 di Tumpukan Kluster.
3.1.10 Bidang FirstClusterOfRootDirectory
Bidang FirstClusterOfRootDirectory harus berisi indeks kluster kluster pertama dari direktori akar. Implementasi harus melakukan setiap upaya untuk menempatkan kluster pertama direktori akar di kluster non-buruk pertama setelah kluster bitmap alokasi dan Tabel Up-case mengkonsumsi.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 2, indeks kluster pertama di Cluster Heap
Paling banyak ClusterCount + 1, indeks kluster terakhir di Cluster Heap
3.1.11 Bidang VolumeSerialNumber
Bidang VolumeSerialNumber harus berisi nomor seri yang unik. Ini membantu implementasi untuk membedakan antara volume exFAT yang berbeda. Implementasi harus menghasilkan nomor seri dengan menggabungkan tanggal dan waktu pemformatan volume exFAT. Mekanisme untuk menggabungkan tanggal dan waktu untuk membentuk nomor seri adalah spesifik implementasi.
Semua nilai yang mungkin untuk bidang ini valid.
3.1.12 FileSystemRevision Field
Bidang FileSystemRevision harus menjelaskan nomor revisi utama dan kecil dari struktur exFAT pada volume yang diberikan.
Byte urutan tinggi adalah nomor revisi utama dan byte urutan rendah adalah nomor revisi kecil. Misalnya, jika byte urutan tinggi berisi nilai 01h dan jika byte urutan rendah berisi nilai 05h, bidang FileSystemRevision menjelaskan nomor revisi 1,05. Demikian juga, jika byte urutan tinggi berisi nilai 0Ah dan jika byte urutan rendah berisi nilai 0Fh, bidang FileSystemRevision menjelaskan nomor revisi 10.15.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0 untuk byte urutan rendah dan 1 untuk byte urutan tinggi
Paling banyak 99 untuk byte urutan rendah dan 99 untuk byte urutan tinggi
Jumlah revisi exFAT yang dijelaskan spesifikasi ini adalah 1.00. Implementasi spesifikasi ini harus memasang volume exFAT apa pun dengan revisi utama nomor 1 dan tidak boleh memasang volume exFAT apa pun dengan nomor revisi utama lainnya. Implementasi harus menghormati nomor revisi kecil dan tidak boleh melakukan operasi atau membuat struktur sistem file apa pun yang tidak dijelaskan dalam spesifikasi terkait nomor revisi kecil yang diberikan.
3.1.13 Bidang VolumeFlags
Bidang VolumeFlags akan berisi bendera yang menunjukkan status berbagai struktur sistem file pada volume exFAT (lihat Tabel 5).
Implementasi tidak boleh mencakup bidang ini saat menghitung checksum wilayah Boot Utama atau Boot Cadangan masing-masing. Jika mengacu pada Sektor Boot Cadangan, implementasi akan memperlakukan bidang ini sebagai basi.
Tabel 5 Struktur Bidang VolumeFlags
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
ActiveFat | 0 | 1 | Bidang ini wajib dan Bagian 3.1.13.1 mendefinisikan kontennya. |
VolumeDirty | 1 | 1 | Bidang ini wajib dan Bagian 3.1.13.2 mendefinisikan kontennya. |
MediaFailure | 2 | 1 | Bidang ini wajib dan Bagian 3.1.13.3 mendefinisikan kontennya. |
ClearToZero | 3 | 1 | Bidang ini wajib dan Bagian 3.1.13.4 mendefinisikan kontennya. |
Dicadangkan | 4 | 12 | Bidang ini wajib dan isinya dicadangkan. |
3.1.13.1 Bidang ActiveFat
Bidang ActiveFat harus menjelaskan FAT dan Bitmap Alokasi mana yang aktif (dan implementasinya akan digunakan), sebagai berikut:
0, yang berarti FAT Pertama dan Bitmap Alokasi Pertama aktif
1, yang berarti FAT Kedua dan Bitmap Alokasi Kedua aktif dan hanya dimungkinkan ketika bidang NumberOfFats berisi nilai 2
Implementasi harus menganggap FAT dan Bitmap Alokasi tidak aktif sebagai basi. Hanya implementasi yang sadar TexFAT yang akan mengalihkan FAT aktif dan Bitmap Alokasi (lihat Bagian 7.1).
3.1.13.2 Bidang VolumeDirty
Bidang VolumeDirty akan menjelaskan apakah volume kotor atau tidak, sebagai berikut:
0, yang berarti volume mungkin dalam keadaan konsisten
1, yang berarti volume mungkin dalam keadaan tidak konsisten
Implementasi harus menetapkan nilai bidang ini ke 1 setelah mengalami inkonsistensi metadata sistem file yang tidak mereka selesaikan. Jika, setelah memasang volume, nilai bidang ini adalah 1, hanya implementasi yang menyelesaikan inkonsistensi metadata sistem file yang dapat menghapus nilai bidang ini menjadi 0. Implementasi tersebut hanya akan menghapus nilai bidang ini menjadi 0 setelah memastikan sistem file dalam keadaan konsisten.
Jika, setelah memasang volume, nilai bidang ini adalah 0, implementasi harus mengatur bidang ini ke 1 sebelum memperbarui metadata sistem file dan menghapus bidang ini menjadi 0 setelahnya, mirip dengan urutan tulis yang direkomendasikan yang dijelaskan di Bagian 8.1.
3.1.13.3 Bidang MediaFailure
Bidang MediaFailure harus menjelaskan apakah implementasi telah menemukan kegagalan media atau tidak, sebagai berikut:
0, yang berarti media hosting belum melaporkan kegagalan atau kegagalan yang diketahui sudah dicatat dalam FAT sebagai kluster "buruk"
1, yang berarti media hosting telah melaporkan kegagalan (yaitu telah gagal membaca atau menulis operasi)
Implementasi harus mengatur bidang ini ke 1 ketika:
Media hosting gagal mengakses upaya ke wilayah mana pun dalam volume
Implementasi telah menghabiskan algoritma percobaan kembali akses, jika ada
Jika, setelah memasang volume, nilai bidang ini adalah 1, implementasi yang memindai seluruh volume untuk kegagalan media dan merekam semua kegagalan sebagai kluster "buruk" dalam FAT (atau menyelesaikan kegagalan media) dapat menghapus nilai bidang ini menjadi 0.
3.1.13.4 Bidang ClearToZero
Bidang ClearToZero tidak memiliki arti signifikan dalam spesifikasi ini.
Nilai yang valid untuk bidang ini adalah:
0, yang tidak memiliki arti tertentu
1, yang berarti implementasi harus menghapus bidang ini ke 0 sebelum memodifikasi struktur, direktori, atau file sistem file apa pun
3.1.14 Bidang BytePerSectorShift
Bidang BytesPerSectorShift harus menggambarkan byte per sektor yang dinyatakan sebagai log2(N), di mana N adalah jumlah byte per sektor. Misalnya, untuk 512 byte per sektor, nilai bidang ini adalah 9.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 9 (ukuran sektor 512 byte), yang merupakan sektor terkecil yang mungkin untuk volume exFAT
Paling banyak 12 (ukuran sektor 4096 byte), yang merupakan ukuran halaman memori CPU yang umum di komputer pribadi
3.1.15 SektorPerClusterShift Bidang
Bidang SectorsPerClusterShift harus menggambarkan sektor per kluster yang dinyatakan sebagai log2(N), di mana N adalah jumlah sektor per kluster. Misalnya, untuk 8 sektor per kluster, nilai bidang ini adalah 3.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0 (1 sektor per kluster), yang merupakan kluster terkecil yang mungkin
Paling banyak 25 - BytesPerSectorShift, yang mengevaluasi ke ukuran kluster 32MB
3.1.16 Bidang NumberOfFats
Bidang NumberOfFats harus menjelaskan jumlah FAT dan Bitmap Alokasi yang dikandung volume.
Rentang nilai yang valid untuk bidang ini adalah:
1, yang menunjukkan volume hanya berisi Fat Pertama dan Bitmap Alokasi Pertama
2, yang menunjukkan volume berisi FAT Pertama, FAT Kedua, Bitmap Alokasi Pertama, dan Bitmap Alokasi Kedua; nilai ini hanya valid untuk volume TexFAT
3.1.17 DrivePilih Bidang
Bidang DriveSelect harus berisi nomor drive INT 13h yang diperluas, yang membantu boot-strapping dari volume ini menggunakan INT 13h yang diperluas pada komputer pribadi.
Semua nilai yang mungkin untuk bidang ini valid. Bidang serupa dalam sistem file berbasis FAT sebelumnya sering berisi nilai 80h.
3.1.18 Bidang PersenInUse
Bidang PercentInUse harus menjelaskan persentase kluster dalam Cluster Heap yang dialokasikan.
Rentang nilai yang valid untuk bidang ini adalah:
Antara 0 dan 100 secara inklusif, yang merupakan persentase kluster yang dialokasikan di Tumpukan Kluster, dibulatkan ke bawah ke bilangan bulat terdekat
Tepat FFh, yang menunjukkan persentase kluster yang dialokasikan dalam Tumpukan Kluster tidak tersedia
Implementasi akan mengubah nilai bidang ini untuk mencerminkan perubahan alokasi kluster dalam Tumpukan Kluster atau harus mengubahnya menjadi FFh.
Implementasi tidak boleh mencakup bidang ini saat menghitung checksum wilayah Boot Utama atau Boot Cadangan masing-masing. Jika mengacu pada Sektor Boot Cadangan, implementasi akan memperlakukan bidang ini sebagai basi.
3.1.19 Bidang BootCode
Bidang BootCode harus berisi instruksi boot-strapping. Implementasi dapat mengisi bidang ini dengan instruksi CPU yang diperlukan untuk boot-strapping sistem komputer. Implementasi yang tidak memberikan instruksi boot-strapping harus menginisialisasi setiap byte di bidang ini ke F4h (instruksi penghentian untuk CPU yang umum di komputer pribadi) sebagai bagian dari operasi format mereka.
3.1.20 Bidang BootSignature
Bidang BootSignature akan menjelaskan apakah niat sektor tertentu adalah untuk menjadi Sektor Boot atau tidak.
Nilai yang valid untuk bidang ini adalah AA55h. Nilai lain dalam bidang ini membatalkan Sektor Boot masing-masing. Implementasi harus memverifikasi konten bidang ini sebelum bergantung pada bidang lain di Sektor Boot masing-masing.
3.2 Sub-wilayah Utama dan Backup Extended Boot
Setiap sektor Main Extended Boot Sectors memiliki struktur yang sama; namun, setiap sektor dapat menyimpan instruksi boot-strapping yang berbeda (lihat Tabel 6). Agen boot-strapping, seperti instruksi boot-strapping di Sektor Boot Utama, implementasi BIOS alternatif, atau firmware sistem yang disematkan, dapat memuat sektor-sektor ini dan menjalankan instruksi yang dikandungnya.
Backup Extended Boot Sectors adalah cadangan dari Sektor Boot Utama yang Diperluas dan memiliki struktur yang sama (lihat Tabel 6).
Sebelum menjalankan instruksi Sektor Boot Utama atau Cadangan yang Diperluas, implementasi harus memverifikasi kontennya dengan memastikan bidang ExtendedBootSignature setiap sektor berisi nilai yang ditentukan.
Sementara operasi format awal akan menginisialisasi konten Sektor Boot Utama dan Cadangan yang Diperluas, implementasi dapat memperbarui sektor-sektor ini (dan juga harus memperbarui Boot Checksum masing-masing) sesuai kebutuhan.
Tabel 6 Struktur Sektor Boot Yang Diperluas
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
ExtendedBootCode | 0 | 2BytePerSectorShift – 4 | Bidang ini wajib dan Bagian 3.2.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang BytesPerSectorShift. |
ExtendedBootSignature | 2BytePerSectorShift – 4 | 4 | Bidang ini wajib dan Bagian 3.2.2 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang BytesPerSectorShift. |
3.2.1 Bidang ExtendedBootCode
Bidang ExtendedBootCode harus berisi instruksi boot-strapping. Implementasi dapat mengisi bidang ini dengan instruksi CPU yang diperlukan untuk boot-strapping sistem komputer. Implementasi yang tidak memberikan instruksi boot-strapping harus menginisialisasi setiap byte di bidang ini ke 00h sebagai bagian dari operasi format mereka.
3.2.2 ExtendedBootSignature Field
Bidang ExtendedBootSignature harus menjelaskan apakah niat sektor yang diberikan adalah untuk menjadi Sektor Boot Diperpanjang atau tidak.
Nilai yang valid untuk bidang ini adalah AA550000h. Nilai lain dalam bidang ini membatalkan Sektor Boot Utama atau Cadangan yang Diperluas masing-masing. Implementasi harus memverifikasi konten bidang ini sebelum bergantung pada bidang lain di Extended Boot Sector masing-masing.
3.3 Sub-wilayah Parameter OEM Utama dan Cadangan
Sub-wilayah Parameter OEM Utama berisi sepuluh struktur parameter yang mungkin berisi informasi khusus produsen (lihat Tabel 7). Masing-masing dari sepuluh struktur parameter berasal dari templat Parameter Generik (lihat Bagian 3.3.2). Produsen dapat memperoleh struktur parameter kustom mereka sendiri dari templat Parameter Generik. Spesifikasi ini sendiri mendefinisikan dua struktur parameter: Parameter Null (lihat Bagian 3.3.3) dan Parameter Flash (lihat Bagian 3.3.4).
Parameter OEM Cadangan adalah cadangan Parameter OEM Utama dan memiliki struktur yang sama (lihat Tabel 7).
Sebelum menggunakan konten Parameter OEM Utama atau Cadangan, implementasi harus memverifikasi kontennya dengan memvalidasi Boot Checksum masing-masing.
Produsen harus mengisi Parameter OEM Utama dan Cadangan dengan struktur parameter kustom mereka sendiri, jika ada, dan struktur parameter lainnya. Operasi format berikutnya harus mempertahankan konten Parameter OEM Utama dan Cadangan.
Implementasi dapat memperbarui Parameter OEM Utama dan Cadangan sesuai kebutuhan (dan juga harus memperbarui Boot Checksum masing-masing).
Tabel 7 Struktur Parameter OEM
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
Parameter[0] | 0 | 48 | Bidang ini wajib dan Bagian 3.3.1 mendefinisikan kontennya. |
. . . |
. . . |
. . . |
. . . |
Parameter[9] | 432 | 48 | Bidang ini wajib dan Bagian 3.3.1 mendefinisikan kontennya. |
Dicadangkan | 480 | 2BytePerSectorShift – 480 | Bidang ini wajib dan isinya dicadangkan. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang BytesPerSectorShift. |
3.3.1 Parameters[0] ... Parameter[9]
Setiap bidang Parameter dalam array ini berisi struktur parameter, yang berasal dari templat Parameter Generik (lihat Bagian 3.3.2). Setiap bidang Parameter yang tidak digunakan akan dijelaskan sebagai berisi struktur Parameter Null (lihat Bagian 3.3.3).
3.3.2 Templat Parameter Generik
Templat Parameter Generik menyediakan definisi dasar struktur parameter (lihat Tabel 8). Semua struktur parameter berasal dari templat ini. Dukungan untuk templat Parameter Generik ini wajib dilakukan.
Templat Parameter Generik Tabel 8
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
ParametersGuid | 0 | 16 | Bidang ini wajib dan Bagian 3.3.2.1 mendefinisikan kontennya. |
CustomDefined | 16 | 32 | Bidang ini wajib dan struktur yang berasal dari templat ini menentukan isinya. |
3.3.2.1 Bidang ParametersGuid
Bidang ParametersGuid harus menjelaskan GUID, yang menentukan tata letak sisa struktur parameter yang diberikan.
Semua nilai yang mungkin untuk bidang ini valid; namun, produsen harus menggunakan alat pembuatan GUID, seperti GuidGen.exe, untuk memilih GUID saat memperoleh struktur parameter kustom dari templat ini.
3.3.3 Parameter Null
Struktur Parameter Null berasal dari templat Parameter Generik (lihat Bagian 3.3.2) dan harus menjelaskan bidang Parameter yang tidak digunakan (lihat Tabel 9). Saat membuat atau memperbarui struktur Parameter OEM, implementasi harus mengisi bidang Parameter yang tidak digunakan dengan struktur Parameter Null. Selain itu, saat membuat atau memperbarui struktur Parameter OEM, implementasi harus mengonsolidasikan struktur Parameter Null di akhir array, sehingga meninggalkan semua struktur Parameter lainnya di awal struktur Parameter OEM.
Dukungan untuk struktur Parameter Null adalah wajib.
Tabel 9 Struktur Parameter Null
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
ParametersGuid | 0 | 16 | Bidang ini wajib dan Bagian 3.3.3.1 mendefinisikan kontennya. |
Dicadangkan | 16 | 32 | Bidang ini wajib dan isinya dicadangkan. |
3.3.3.1 Bidang ParametersGuid
Bidang ParametersGuid harus sesuai dengan definisi yang disediakan oleh templat Parameter Generik (lihat Bagian 3.3.2.1).
Nilai yang valid untuk bidang ini, dalam notasi GUID, adalah {00000000-0000-0000-0000-000000000000}.
3.3.4 Parameter Flash
Struktur Parameter Flash berasal dari templat Parameter Generik (lihat Bagian 3.3.2) dan berisi parameter untuk media flash (lihat Tabel 10). Produsen perangkat penyimpanan berbasis lampu kilat dapat mengisi bidang Parameter (sebaiknya bidang Parameter[0]) dengan struktur parameter ini. Implementasi dapat menggunakan informasi dalam struktur Parameter Flash untuk mengoptimalkan operasi akses selama baca/tulis dan untuk penyelarasan struktur sistem file durning pemformatan media.
Dukungan untuk struktur Parameter Flash bersifat opsional.
Tabel 10 Struktur Parameter Flash
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
ParametersGuid | 0 | 16 | Bidang ini wajib dan Bagian 3.3.4.1 mendefinisikan kontennya. |
HapusBlockSize | 16 | 4 | Bidang ini wajib dan Bagian 3.3.4.2 mendefinisikan kontennya. |
Ukuran Halaman | 20 | 4 | Bidang ini wajib dan Bagian 3.3.4.3 mendefinisikan kontennya. |
SpareSectors | 24 | 4 | Bidang ini wajib dan Bagian 3.3.4.4 mendefinisikan kontennya. |
RandomAccessTime | 28 | 4 | Bidang ini wajib dan Bagian 3.3.4.5 mendefinisikan kontennya. |
ProgrammingTime | 32 | 4 | Bidang ini wajib dan Bagian 3.3.4.6 mendefinisikan kontennya. |
ReadCycle | 36 | 4 | Bidang ini wajib dan Bagian 3.3.4.7 mendefinisikan kontennya. |
WriteCycle | 40 | 4 | Bidang ini wajib dan Bagian 3.3.4.8 mendefinisikan kontennya. |
Dicadangkan | 44 | 4 | Bidang ini wajib dan isinya dicadangkan. |
Semua nilai yang mungkin untuk semua bidang Parameter Flash, kecuali untuk bidang ParametersGuid, valid. Namun, nilai 0 menunjukkan bidang sebenarnya tidak berarti (implementasi harus mengabaikan bidang yang diberikan).
3.3.4.1 Bidang ParametersGuid
Bidang ParametersGuid harus sesuai dengan definisi yang disediakan dalam templat Parameter Generik (lihat Bagian 3.3.2.1).
Nilai yang valid untuk bidang ini, dalam notasi GUID, adalah {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.
3.3.4.2 Bidang HapusBlockSize
Bidang EraseBlockSize harus menggambarkan ukuran, dalam byte, dari blok penghapusan media flash.
3.3.4.3 Bidang Ukuran Halaman
Bidang PageSize akan menjelaskan ukuran, dalam byte halaman media flash.
3.3.4.4 Bidang SpareSectors
Bidang SpareSectors harus menjelaskan jumlah sektor yang tersedia media flash untuk operasi hemat internalnya.
3.3.4.5 Bidang RandomAccessTime
Bidang RandomAccessTime harus menggambarkan waktu akses acak rata-rata media flash, dalam nanodetik.
3.3.4.6 Bidang ProgrammingTime
Bidang ProgrammingTime harus menggambarkan waktu pemrograman rata-rata media flash, dalam nanodetik.
3.3.4.7 Bidang Siklus Baca
Bidang ReadCycle harus menjelaskan waktu siklus baca rata-rata media flash, dalam nanodetik.
3.3.4.8 Bidang Siklus Tulis
Bidang WriteCycle harus menggambarkan waktu siklus tulis rata-rata, dalam nanodetik.
3.4 Sub-wilayah Checksum Boot Utama dan Cadangan
Checksum Boot Utama dan Cadangan masing-masing berisi pola berulang checksum empat byte dari konten semua sub-wilayah lain di wilayah Boot masing-masing. Perhitungan checksum tidak boleh mencakup bidang VolumeFlags dan PercentInUse di Sektor Boot masing-masing (lihat Gambar 1). Pola berulang checksum empat byte mengisi sub-wilayah Boot Checksum masing-masing dari awal hingga akhir sub-wilayah.
Sebelum menggunakan konten sub-wilayah lain di wilayah Utama atau Boot Cadangan, implementasi harus memverifikasi kontennya dengan memvalidasi Checksum Boot masing-masing.
Sementara operasi format awal akan mengisi Checksum Boot Utama dan Cadangan dengan pola checksum berulang, implementasi harus memperbarui sektor-sektor ini saat konten sektor lain di wilayah Boot masing-masing berubah.
Gambar 1 Komputasi Checksum Boot
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 Wilayah Tabel Alokasi File
Wilayah Tabel Alokasi File (FAT) dapat berisi hingga dua FAT, satu di sub-wilayah FAT Pertama dan satu lagi di sub-wilayah FAT Kedua. Bidang NumberOfFats menjelaskan berapa banyak FAT yang dikandung wilayah ini. Nilai yang valid untuk bidang NumberOfFats adalah 1 dan 2. Oleh karena itu, sub-wilayah FAT Pertama selalu berisi FAT. Jika bidang NumberOfFats adalah dua, maka sub-wilayah FAT Kedua juga berisi FAT.
Bidang ActiveFat dari bidang VolumeFlags menjelaskan FAT mana yang aktif. Hanya bidang VolumeFlags di Sektor Boot Utama yang saat ini. Implementasi harus memperlakukan FAT yang tidak aktif sebagai basi. Penggunaan FAT yang tidak aktif dan peralihan antar FAT bersifat spesifik implementasi.
4.1 Sub-wilayah FAT Pertama dan Kedua
FAT harus menjelaskan rantai kluster dalam Cluster Heap (lihat Tabel 11). Rantai kluster adalah serangkaian kluster yang menyediakan ruang untuk merekam konten file, direktori, dan struktur sistem file lainnya. FAT mewakili rantai kluster sebagai daftar indeks kluster yang ditautkan secara senyap. Dengan pengecualian dua entri pertama, setiap entri dalam FAT mewakili tepat satu kluster.
Tabel 11 Struktur Tabel Alokasi File
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
FatEntry[0] | 0 | 4 | Bidang ini wajib dan Bagian 4.1.1 mendefinisikan kontennya. |
FatEntry[1] | 4 | 4 | Bidang ini wajib dan Bagian 4.1.2 mendefinisikan kontennya. |
FatEntry[2] | 8 | 4 | Bidang ini wajib dan Bagian 4.1.3 mendefinisikan kontennya. |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | Bidang ini wajib dan Bagian 4.1.3 mendefinisikan kontennya. ClusterCount + 1 tidak pernah dapat melebihi FFFFFFF6h. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterCount. |
Ruang Berlebih | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Bidang ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterCount, FatLength, dan BytesPerSectorShift. |
4.1.1 FatEntry[0] Bidang
Bidang FatEntry[0] harus menggambarkan jenis media dalam byte pertama (byte urutan terendah) dan akan berisi FFh dalam tiga byte yang tersisa.
Jenis media (byte pertama) harus F8h.
4.1.2 FatEntry[1] Bidang
Bidang FatEntry[1] hanya ada karena prioritas historis dan tidak menggambarkan apa pun yang menarik.
Nilai yang valid untuk bidang ini adalah FFFFFFFFh. Implementasi harus menginisialisasi bidang ini ke nilai yang ditentukan dan tidak boleh menggunakan bidang ini untuk tujuan apa pun. Implementasi tidak boleh menafsirkan bidang ini dan harus mempertahankan isinya di seluruh operasi yang memodifikasi bidang sekitarnya.
4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Fields
Setiap bidang FatEntry dalam array ini akan mewakili kluster dalam Cluster Heap. FatEntry[2] mewakili kluster pertama dalam Cluster Heap dan FatEntry[ClusterCount+1] mewakili kluster terakhir dalam Cluster Heap.
Rentang nilai yang valid untuk bidang ini adalah:
Antara 2 dan ClusterCount + 1, secara inklusif, yang menunjuk ke FatEntry berikutnya dalam rantai kluster yang diberikan; FatEntry yang diberikan tidak akan menunjuk ke FatEntry apa pun yang mendahuluinya dalam rantai kluster yang diberikan
Tepat FFFFFFF7h, yang menandai kluster yang sesuai dengan FatEntry yang diberikan sebagai "buruk"
Tepat FFFFFFFFh, yang menandai kluster yang sesuai dengan FatEntry yang diberikan sebagai kluster terakhir dari rantai kluster; ini adalah satu-satunya nilai yang valid untuk FatEntry terakhir dari rantai kluster tertentu
5 Wilayah Data
Wilayah Data berisi Tumpukan Kluster, yang menyediakan ruang terkelola untuk struktur, direktori, dan file sistem file.
5.1 Sub-wilayah Timbunan Kluster
Struktur Cluster Heap sangat sederhana (lihat Tabel 12); setiap seri sektor berturut-turut menjelaskan satu kluster, seperti yang ditentukan bidang SectorsPerClusterShift. Yang penting, kluster pertama dari Cluster Heap memiliki indeks dua, yang secara langsung sesuai dengan indeks FatEntry[2].
Dalam volume exFAT, Bitmap Alokasi (lihat Bagian 7.1.5) mempertahankan catatan status alokasi semua kluster. Ini adalah perbedaan signifikan dari pendahulu exFAT (FAT12, FAT16, dan FAT32), di mana FAT mempertahankan catatan status alokasi semua kluster dalam Cluster Heap.
Tabel 12 Struktur Timbunan Kluster
Nama Bidang | Offset (sektor) |
Ukuran (sektor) |
Komentar |
---|---|---|---|
Kluster[2] | ClusterHeapOffset | 2SektorPerClusterShift | Bidang ini wajib dan Bagian 5.1.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan berisi bidang ClusterHeapOffset dan SectorsPerClusterShift. |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2SektorPerClusterShift | 2SektorPerClusterShift | Bidang ini wajib dan Bagian 5.1.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterCount, ClusterHeapOffset, dan SectorsPerClusterShift. |
5.1.1 Kluster[2] ... Cluster[ClusterCount+1] Fields
Setiap bidang Kluster dalam array ini adalah serangkaian sektor yang berdekatan, yang ukurannya ditentukan oleh bidang SectorsPerClusterShift.
6 Struktur Direktori
Sistem file exFAT menggunakan pendekatan pohon direktori untuk mengelola struktur sistem file dan file yang ada di Cluster Heap. Direktori memiliki hubungan satu-ke-banyak antara induk dan anak di pohon direktori.
Direktori yang dirujuk bidang FirstClusterOfRootDirectory adalah akar pohon direktori. Semua direktori lain turun dari direktori akar dengan cara yang ditautkan dengan nyanyian.
Setiap direktori terdiri dari serangkaian entri direktori (lihat Tabel 13).
Satu atau beberapa entri direktori digabungkan ke dalam set entri direktori yang menjelaskan sesuatu yang menarik, seperti struktur sistem file, sub-direktori, atau file.
Tabel 13 Struktur Direktori
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | Bidang ini wajib dan Bagian 6.1 mendefinisikan kontennya. |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | Bidang ini wajib dan Bagian 6.1 mendefinisikan kontennya. N, jumlah bidang DirectoryEntry, adalah ukuran, dalam byte, dari rantai kluster yang berisi direktori yang diberikan, dibagi dengan ukuran bidang DirectoryEntry, 32 byte. |
6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]
Setiap bidang DirectoryEntry dalam array ini berasal dari templat Generic DirectoryEntry (lihat Bagian 6.2).
6.2 Templat Direktori GenerikEntry
Templat Generic DirectoryEntry menyediakan definisi dasar untuk entri direktori (lihat Tabel 14). Semua struktur entri direktori yang berasal dari templat ini dan hanya struktur entri direktori yang ditentukan Microsoft yang valid (exFAT tidak memiliki ketentuan untuk struktur entri direktori yang ditentukan produsen kecuali sebagaimana didefinisikan dalam Bagian 7.8 dan Bagian 7.9). Kemampuan untuk menginterpretasikan templat Generic DirectoryEntry adalah wajib.
Templat Direktori Generik Tabel 14
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 6.2.1 mendefinisikan kontennya. |
CustomDefined | 1 | 19 | Bidang ini wajib dan struktur yang berasal dari templat ini dapat menentukan isinya. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 6.2.2 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 6.2.3 mendefinisikan kontennya. |
6.2.1 Bidang EntryType
Bidang EntryType memiliki tiga mode penggunaan yang ditentukan nilai bidang (lihat daftar di bawah).
00h, yang merupakan penanda akhir direktori dan kondisi berikut berlaku:
Semua bidang lain dalam DirectoryEntry yang diberikan benar-benar dicadangkan
Semua entri direktori berikutnya dalam direktori yang diberikan juga merupakan penanda akhir direktori
Penanda akhir direktori hanya valid di luar set entri direktori
Implementasi dapat menimpa penanda akhir direktori seperlunya
Antara 01 jam dan 7Fh secara inklusif, yang merupakan penanda entri direktori yang tidak digunakan dan kondisi berikut berlaku:
Semua bidang lain dalam DirectoryEntry yang diberikan sebenarnya tidak terdefinisi
Entri direktori yang tidak digunakan hanya valid di luar set entri direktori
Implementasi dapat menimpa entri direktori yang tidak digunakan seperlunya
Rentang nilai ini sesuai dengan bidang InUse (lihat Bagian 6.2.1.4) yang berisi nilai 0
Antara 81 jam dan FFh secara inklusif, yang merupakan entri direktori reguler dan kondisi berikut berlaku:
Konten bidang EntryType (lihat Tabel 15) menentukan tata letak sisa struktur DirectoryEntry
Rentang nilai ini, dan hanya rentang nilai ini, yang valid di dalam set entri direktori
Rentang nilai ini secara langsung sesuai dengan bidang InUse (lihat Bagian 6.2.1.4) yang berisi nilai 1
Untuk mencegah modifikasi pada bidang InUse (lihat Bagian 6.2.1.4) secara keliru menghasilkan penanda akhir direktori, nilai 80h tidak valid.
Tabel 15 Struktur Bidang EntryType Generik
Nama Bidang | Offset (bit) |
Ukuran (Bit) |
Komentar |
---|---|---|---|
TypeCode | 0 | 5 | Bidang ini wajib dan Bagian 6.2.1.1 mendefinisikan kontennya. |
TypeImportance | 5 | 1 | Bidang ini wajib dan Bagian 6.2.1.2 mendefinisikan kontennya. |
TypeCategory | 6 | 1 | Bidang ini wajib dan Bagian 6.2.1.3 mendefinisikan kontennya. |
InUse | 7 | 1 | Bidang ini wajib dan Bagian 6.2.1.4 mendefinisikan kontennya. |
6.2.1.1 Bidang TypeCode
Bidang TypeCode sebagian menjelaskan jenis tertentu dari entri direktori yang diberikan. Bidang ini, ditambah bidang TypeImportance dan TypeCategory (lihat Bagian 6.2.1.2 dan Bagian 6.2.1.3, masing-masing) secara unik mengidentifikasi jenis entri direktori yang diberikan.
Semua nilai yang mungkin dari bidang ini valid, kecuali bidang TypeImportance dan TypeCategory keduanya berisi nilai 0; dalam hal ini, nilai 0 tidak valid untuk bidang ini.
6.2.1.2 Bidang TypeImportance
Bidang TypeImportance harus menjelaskan pentingnya entri direktori yang diberikan.
Nilai yang valid untuk bidang ini adalah:
0, yang berarti entri direktori yang diberikan sangat penting (lihat Bagian 6.3.1.2.1 dan Bagian 6.4.1.2.1 untuk entri direktori primer dan kritis sekunder penting, masing-masing)
1, yang berarti entri direktori yang diberikan jinak (lihat Bagian 6.3.1.2.2 dan Bagian 6.4.1.2.2 untuk entri direktori primer dan sekunder jinak, masing-masing)
6.2.1.3 Bidang TypeCategory
Bidang TypeCategory harus menjelaskan kategori entri direktori yang diberikan.
Nilai yang valid untuk bidang ini adalah:
0, yang berarti entri direktori yang diberikan adalah primer (lihat Bagian 6.3)
1, yang berarti entri direktori yang diberikan adalah sekunder (lihat Bagian 6.4)
6.2.1.4 Bidang Penggunaan
Bidang InUse akan menjelaskan apakah entri direktori yang diberikan digunakan atau tidak.
Nilai yang valid untuk bidang ini adalah:
0, yang berarti entri direktori yang diberikan tidak digunakan; ini berarti struktur yang diberikan sebenarnya adalah entri direktori yang tidak digunakan
1, yang berarti entri direktori yang diberikan sedang digunakan; ini berarti struktur yang diberikan adalah entri direktori reguler
6.2.2 Bidang FirstCluster
Bidang FirstCluster harus berisi indeks kluster pertama alokasi dalam Cluster Heap yang terkait dengan entri direktori yang diberikan.
Rentang nilai yang valid untuk bidang ini adalah:
Tepat 0, yang berarti tidak ada alokasi kluster
Antara 2 dan ClusterCount + 1, yang merupakan rentang indeks kluster yang valid
Struktur yang berasal dari templat ini dapat menentukan ulang bidang FirstCluster dan DataLength, jika alokasi kluster tidak kompatibel dengan struktur turunan.
6.2.3 Bidang DataLength
Bidang DataLength menjelaskan ukuran, dalam byte, dari data yang dikandung alokasi kluster terkait.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0; jika bidang FirstCluster berisi nilai 0, maka satu-satunya nilai bidang ini yang valid adalah 0
Paling banyak ClusterCount * 2SektorPerClusterShift* 2BytesPerSectorShift
Struktur yang berasal dari templat ini dapat menentukan ulang bidang FirstCluster dan DataLength, jika alokasi kluster tidak dimungkinkan untuk struktur turunan.
6.3 Templat Direktori Utama Generik
Entri direktori pertama dalam set entri direktori harus menjadi entri direktori utama. Semua entri direktori berikutnya, jika ada, dalam kumpulan entri direktori harus entri direktori sekunder (lihat Bagian 6.4).
Kemampuan untuk menginterpretasikan templat Generic Primary DirectoryEntry adalah wajib.
Semua struktur entri direktori utama berasal dari templat Generic Primary DirectoryEntry (lihat Tabel 16), yang berasal dari templat Generic DirectoryEntry (lihat Bagian 6.2).
Templat Direktori Utama Generik Tabel 16
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 6.3.1 mendefinisikan kontennya. |
SecondaryCount | 1 | 1 | Bidang ini wajib dan Bagian 6.3.2 mendefinisikan kontennya. |
SetChecksum | 2 | 2 | Bidang ini wajib dan Bagian 6.3.3 mendefinisikan kontennya. |
GeneralPrimaryFlags | 4 | 2 | Bidang ini wajib dan Bagian 6.3.4 mendefinisikan kontennya. |
CustomDefined | 6 | 14 | Bidang ini wajib dan struktur yang berasal dari templat ini menentukan isinya. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 6.3.5 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 6.3.6 mendefinisikan kontennya. |
6.3.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1).
6.3.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.1).
6.3.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.2).
6.3.1.2.1 Entri Direktori Utama Penting
Entri direktori utama penting berisi informasi yang sangat penting untuk manajemen volume exFAT yang tepat. Hanya direktori akar yang berisi entri direktori utama penting (Entri direktori file adalah pengecualian, lihat Bagian 7.4).
Definisi entri direktori utama penting berkorelasi dengan nomor revisi exFAT utama. Implementasi harus mendukung semua entri direktori utama penting dan hanya akan merekam struktur entri direktori utama penting yang ditentukan spesifikasi ini.
6.3.1.2.2 Entri Direktori Utama Jinak
Entri direktori utama jinak berisi informasi tambahan yang mungkin berguna untuk mengelola volume exFAT. Direktori apa pun mungkin berisi entri direktori utama yang jinak.
Definisi entri direktori utama jinak berkorelasi dengan nomor revisi exFAT minor. Dukungan untuk setiap entri direktori utama jinak spesifikasi ini, atau spesifikasi berikutnya, mendefinisikan bersifat opsional. Entri direktori utama jinak yang tidak dikenal merender seluruh set entri direktori sebagai tidak dikenali (di luar definisi templat entri direktori yang berlaku).
6.3.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.3).
Untuk templat ini, nilai yang valid untuk bidang ini adalah 0.
6.3.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.4).
6.3.2 Bidang SecondaryCount
Bidang SecondaryCount harus menjelaskan jumlah entri direktori sekunder yang segera mengikuti entri direktori utama yang diberikan. Entri direktori sekunder ini, bersama dengan entri direktori utama yang diberikan, terdiri dari set entri direktori.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0, yang berarti entri direktori utama ini adalah satu-satunya entri dalam set entri direktori
Paling banyak 255, yang berarti 255 entri direktori berikutnya dan entri direktori utama ini terdiri dari set entri direktori
Struktur entri direktori utama penting yang berasal dari templat ini dapat menentukan ulang bidang SecondaryCount dan SetChecksum.
6.3.3 SetChecksum Field
Bidang SetChecksum harus berisi checksum semua entri direktori dalam set entri direktori yang diberikan. Namun, checksum mengecualikan bidang ini (lihat Gambar 2). Implementasi harus memverifikasi konten bidang ini valid sebelum menggunakan entri direktori lain dalam set entri direktori yang diberikan.
Struktur entri direktori utama penting yang berasal dari templat ini dapat menentukan ulang bidang SecondaryCount dan SetChecksum.
Gambar 2 EntrySetKomputasiChecksum
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 Bidang GeneralPrimaryFlags
Bidang GeneralPrimaryFlags berisi bendera (lihat Tabel 17).
Struktur entri direktori utama penting yang berasal dari templat ini dapat menentukan ulang bidang ini.
Tabel 17 Struktur Bidang GeneralPrimaryFlags Generik
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
AllocationPossible | 0 | 1 | Bidang ini wajib dan Bagian 6.3.4.1 mendefinisikan kontennya. |
NoFatChain | 1 | 1 | Bidang ini wajib dan Bagian 6.3.4.2 mendefinisikan kontennya. |
CustomDefined | 2 | 14 | Bidang ini wajib dan struktur yang berasal dari templat ini dapat menentukan bidang ini. |
6.3.4.1 Bidang AlokasiPossible
Bidang AllocationPossible harus menjelaskan apakah alokasi dalam Tumpukan Kluster dimungkinkan atau tidak untuk entri direktori yang diberikan.
Nilai yang valid untuk bidang ini adalah:
0, yang berarti alokasi kluster terkait tidak dimungkinkan dan bidang FirstCluster dan DataLength sebenarnya tidak terdefinisi (struktur yang berasal dari templat ini dapat menentukan ulang bidang tersebut)
1, yang berarti alokasi kluster terkait dimungkinkan dan bidang FirstCluster dan DataLength sebagaimana didefinisikan
6.3.4.2 Bidang NoFatChain
Bidang NoFatChain akan menunjukkan apakah FAT aktif menjelaskan rantai kluster alokasi yang diberikan atau tidak.
Nilai yang valid untuk bidang ini adalah:
0, yang berarti entri FAT yang sesuai untuk rantai kluster alokasi valid dan implementasi harus menafsirkannya; jika bidang AllocationPossible berisi nilai 0, atau jika bidang AllocationPossible berisi nilai 1 dan bidang FirstCluster berisi nilai 0, maka satu-satunya nilai yang valid bidang ini adalah 0
1, yang berarti alokasi terkait adalah satu rangkaian kluster yang bersebelahan; entri FAT yang sesuai untuk kluster tidak valid dan implementasi tidak akan menafsirkannya; implementasi dapat menggunakan persamaan berikut untuk menghitung ukuran alokasi terkait: DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) dibulatkan ke atas ke bilangan bulat terdekat
Jika struktur entri direktori utama penting yang berasal dari templat ini mendefinisikan ulang bidang GeneralPrimaryFlags, maka entri FAT yang sesuai untuk rantai kluster alokasi terkait valid.
6.3.5 BidangCluster Pertama
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.2).
Jika bit NoFatChain adalah 1 maka FirstCluster harus menunjuk ke kluster yang valid dalam tumpukan kluster.
Struktur entri direktori utama penting yang berasal dari templat ini dapat menentukan ulang bidang FirstCluster dan DataLength. Struktur lain yang berasal dari templat ini dapat menentukan ulang bidang FirstCluster dan DataLength hanya jika bidang AllocationPossible berisi nilai 0.
6.3.6 Bidang DataLength
Bidang DataLength harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.3).
Jika bit NoFatChain adalah 1, maka DataLength tidak boleh nol. Jika bidang FirstCluster adalah nol, maka DataLength juga harus nol.
Struktur entri direktori utama penting yang berasal dari templat ini dapat menentukan ulang bidang FirstCluster dan DataLength. Struktur lain yang berasal dari templat ini dapat menentukan ulang bidang FirstCluster dan DataLength hanya jika bidang AllocationPossible berisi nilai 0.
6.4 Templat Direktori Sekunder Generik
Tujuan utama entri direktori sekunder adalah untuk memberikan informasi tambahan tentang set entri direktori. Kemampuan untuk menafsirkan templat Generic Secondary DirectoryEntry adalah wajib.
Definisi entri direktori sekunder penting dan jinak berkorelasi dengan nomor revisi minor exFAT. Dukungan untuk setiap entri direktori sekunder penting atau jinak spesifikasi ini, atau spesifikasi berikutnya, mendefinisikan bersifat opsional.
Semua struktur entri direktori sekunder berasal dari templat Direktori Sekunder Generik (lihat Tabel 18), yang berasal dari templat Generic DirectoryEntry (lihat Bagian 6.2).
Tabel 18 Templat Direktori Sekunder Generik
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 6.4.1 mendefinisikan kontennya. |
GeneralSecondaryFlags | 1 | 1 | Bidang ini wajib dan Bagian 6.4.2 mendefinisikan kontennya. |
CustomDefined | 2 | 18 | Bidang ini wajib dan struktur yang berasal dari templat ini menentukan isinya. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 6.4.3 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 6.4.4 mendefinisikan kontennya. |
6.4.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1)
Bidang TypeCode 6.4.1.1
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.1).
6.4.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.2).
6.4.1.2.1 Entri Direktori Sekunder Kritis
Entri direktori sekunder penting berisi informasi yang sangat penting untuk manajemen yang tepat dari kumpulan entri direktori yang berisi. Meskipun dukungan untuk entri direktori sekunder penting tertentu bersifat opsional, entri direktori penting yang tidak dikenali merender seluruh set entri direktori sebagai tidak dikenali (di luar definisi templat entri direktori yang berlaku).
Namun, jika set entri direktori berisi setidaknya satu entri direktori sekunder penting yang tidak dikenali implementasi, maka implementasi harus paling banyak menginterpretasikan templat entri direktori dalam kumpulan entri direktori dan bukan data alokasi apa pun yang terkait dengan entri direktori apa pun dalam set entri direktori berisi (Entri direktori file adalah pengecualian, lihat Bagian 7.4).
6.4.1.2.2 Entri Direktori Sekunder Jinak
Entri direktori sekunder jinak berisi informasi tambahan yang mungkin berguna untuk mengelola kumpulan entri direktori yang berisi. Dukungan untuk entri direktori sekunder jinak tertentu bersifat opsional. Entri direktori sekunder jinak yang tidak dikenal tidak merender seluruh set entri direktori sebagai tidak dikenali.
Implementasi dapat mengabaikan entri sekunder jinak yang tidak dikenalinya.
6.4.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.3).
Untuk templat ini, nilai yang valid untuk bidang ini adalah 1.
6.4.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.4).
6.4.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags berisi bendera (lihat Tabel 19).
Tabel 19 GeneralSecondaryFlags Struktur Bidang Generik
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
AllocationPossible | 0 | 1 | Bidang ini wajib dan Bagian 6.4.2.1 mendefinisikan kontennya. |
NoFatChain | 1 | 1 | Bidang ini wajib dan Bagian 6.4.2.2 mendefinisikan kontennya. |
CustomDefined | 2 | 6 | Bidang ini wajib dan struktur yang berasal dari templat ini dapat menentukan bidang ini. |
6.4.2.1 Bidang AlokasiPossible
Bidang AllocationPossible harus memiliki definisi yang sama dengan bidang bernama yang sama dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4.1).
6.4.2.2 Bidang NoFatChain
Bidang NoFatChain harus memiliki definisi yang sama dengan bidang bernama yang sama dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4.2).
6.4.3 BidangCluster Pertama
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.2).
Jika bit NoFatChain adalah 1 maka FirstCluster harus menunjuk ke kluster yang valid dalam tumpukan kluster.
6.4.4 Bidang DataLength
Bidang DataLength harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.3).
Jika bit NoFatChain adalah 1, maka DataLength tidak boleh nol. Jika bidang FirstCluster adalah nol, maka DataLength juga harus nol.
7 Definisi Entri Direktori
Revisi 1.00 dari sistem file exFAT menentukan entri direktori berikut:
Primer kritis
Bitmap Alokasi (Bagian 7.1)
Tabel Up-case (Bagian 7.2)
Label Volume (Bagian 7.3)
File (Bagian 7.4)
Primer jinak
GUID Volume (Bagian 7.5)
Padding TexFAT (Bagian 7.10)
Sekunder kritis
Ekstensi Stream (Bagian 7.6)
Nama File (Bagian 7.7)
Sekunder jinak
Ekstensi Vendor (Bagian 7.8)
Alokasi Vendor (Bagian 7.9)
7.1 Entri Direktori Bitmap Alokasi
Dalam sistem file exFAT, FAT tidak menjelaskan status alokasi kluster; sebaliknya, Bitmap Alokasi tidak. Bitmap Alokasi ada di Tumpukan Kluster (lihat Bagian 7.1.5) dan memiliki entri direktori utama penting yang sesuai di direktori akar (lihat Tabel 20).
Bidang NumberOfFats menentukan jumlah entri direktori Bitmap Alokasi yang valid di direktori akar. Jika bidang NumberOfFats berisi nilai 1, maka satu-satunya jumlah entri direktori Bitmap Alokasi yang valid adalah 1. Selanjutnya, satu entri direktori Bitmap Alokasi hanya valid jika menjelaskan Bitmap Alokasi Pertama (lihat Bagian 7.1.2.1). Jika bidang NumberOfFats berisi nilai 2, maka satu-satunya jumlah entri direktori Bitmap Alokasi yang valid adalah 2. Selanjutnya, dua entri direktori Bitmap Alokasi hanya valid jika salah satunya menjelaskan Bitmap Alokasi Pertama dan yang lainnya menjelaskan Bitmap Alokasi Kedua.
Tabel 20 Struktur Direktori Bitmap Alokasi
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.1.1 mendefinisikan kontennya. |
BitmapFlags | 1 | 1 | Bidang ini wajib dan Bagian 7.1.2 mendefinisikan kontennya. |
Dicadangkan | 2 | 18 | Bidang ini wajib dan isinya dicadangkan. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.1.3 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 7.1.4 mendefinisikan kontennya. |
7.1.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1).
Bidang TypeCode 7.1.1.1
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.1).
Untuk entri direktori Bitmap Alokasi, nilai yang valid untuk bidang ini adalah 1.
7.1.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.2).
Untuk entri direktori Bitmap Alokasi, nilai yang valid untuk bidang ini adalah 0.
7.1.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.3).
7.1.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.4).
7.1.2 Bidang BitmapFlags
Bidang BitmapFlags berisi bendera (lihat Tabel 21).
Tabel 21 Struktur Bidang BitmapFlags
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
BitmapIdentifier | 0 | 1 | Bidang ini wajib dan Bagian 7.1.2.1 mendefinisikan kontennya. |
Dicadangkan | 1 | 7 | Bidang ini wajib dan isinya dicadangkan. |
7.1.2.1 Bidang BitmapIdentifier
Bidang BitmapIdentifier akan menunjukkan Bitmap Alokasi mana yang dijelaskan entri direktori yang diberikan. Implementasi akan menggunakan Bitmap Alokasi Pertama bersama dengan FAT Pertama dan akan menggunakan Bitmap Alokasi Kedua bersama dengan FAT Kedua. Bidang ActiveFat menjelaskan FAT dan Bitmap Alokasi mana yang aktif.
Nilai yang valid untuk bidang ini adalah:
0, yang berarti entri direktori yang diberikan menjelaskan Bitmap Alokasi Pertama
1, yang berarti entri direktori yang diberikan menjelaskan Bitmap Alokasi Kedua dan hanya dimungkinkan ketika NumberOfFats berisi nilai 2
7.1.3 BidangCluster Pertama
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.5).
Bidang ini berisi indeks kluster pertama dari rantai kluster, seperti yang dijelaskan FAT, yang menghosting Bitmap Alokasi.
7.1.4 Bidang DataLength
Bidang DataCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.6).
7.1.5 Bitmap Alokasi
Bitmap Alokasi merekam status alokasi kluster di Tumpuk Kluster. Setiap bit dalam Bitmap Alokasi menunjukkan apakah kluster yang sesuai tersedia untuk alokasi atau tidak.
Bitmap Alokasi mewakili kluster dari indeks terendah hingga tertinggi (lihat Tabel 22). Untuk alasan historis, kluster pertama memiliki indeks 2. Catatan: bit pertama dalam bitmap adalah bit urutan terendah dari byte pertama.
Tabel 22 Struktur Bitmap Alokasi
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | Bidang ini wajib dan Bagian 7.1.5.1 mendefinisikan kontennya. |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | Bidang ini wajib dan Bagian 7.1.5.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterCount. |
Dicadangkan | ClusterCount | (DataLength * 8) – ClusterCount | Bidang ini wajib dan isinya, jika ada, dicadangkan. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterCount. |
7.1.5.1 BitmapEntry[2] ... BitmapEntry[ClusterCount+1] Bidang
Setiap bidang BitmapEntry dalam array ini mewakili kluster di Cluster Heap. BitmapEntry[2] mewakili kluster pertama dalam Cluster Heap dan BitmapEntry[ClusterCount+1] mewakili kluster terakhir dalam Cluster Heap.
Nilai yang valid untuk bidang ini adalah:
0, yang menjelaskan kluster yang sesuai sebagaimana tersedia untuk alokasi
1, yang menjelaskan kluster yang sesuai sebagai tidak tersedia untuk alokasi (alokasi kluster mungkin sudah menggunakan kluster yang sesuai atau FAT aktif dapat menggambarkan kluster yang sesuai sebagai buruk)
7.2 Entri Direktori Tabel Up-case
Tabel Huruf Besar mendefinisikan konversi dari karakter huruf kecil ke huruf besar. Ini penting karena entri direktori Nama File (lihat Bagian 7.7) menggunakan karakter Unicode dan sistem file exFAT tidak peka huruf besar/kecil dan mempertahankan kasus. Tabel Up-case ada di Tumpukan Kluster (lihat Bagian 7.2.5) dan memiliki entri direktori utama penting yang sesuai di direktori akar (lihat Tabel 23). Jumlah entri direktori Tabel Kasus yang valid adalah 1.
Karena hubungan antara Tabel Up-case dan nama file, implementasi tidak boleh mengubah Tabel Up-case, kecuali sebagai hasil dari operasi format.
Table 23 Up-case Table DirectoryEntry Structure
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.2.1 mendefinisikan kontennya. |
Dicadangkan1 | 1 | 3 | Bidang ini wajib dan isinya dicadangkan. |
TableChecksum | 4 | 4 | Bidang ini wajib dan Bagian 7.2.2 mendefinisikan kontennya. |
Dicadangkan2 | 8 | 12 | Bidang ini wajib dan isinya dicadangkan. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.2.3 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 7.2.4 mendefinisikan kontennya. |
7.2.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1).
Bidang TypeCode 7.2.1.1
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.1).
Untuk entri direktori Tabel Huruf Besar/Kecil, nilai yang valid untuk bidang ini adalah 2.
7.2.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.2).
Untuk entri direktori Tabel Huruf Besar/Kecil, nilai yang valid untuk bidang ini adalah 0.
7.2.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.3).
7.2.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.4).
7.2.2 Bidang TableChecksum
Bidang TableChecksum berisi checksum Tabel Up-case (yang dijelaskan bidang FirstCluster dan DataLength). Implementasi harus memverifikasi konten bidang ini valid sebelum menggunakan Tabel Up-case.
Gambar 3 Komputasi 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 Bidang Petunjuk Pertama
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.5).
Bidang ini berisi indeks kluster pertama dari rantai kluster, seperti yang dijelaskan FAT, yang menghosting Tabel Up-case.
7.2.4 Bidang DataLength
Bidang DataCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.6).
7.2.5 Tabel Up-case
Tabel up-case adalah serangkaian pemetaan karakter Unicode. Pemetaan karakter terdiri dari bidang 2-byte, dengan indeks bidang dalam tabel up-case yang mewakili karakter Unicode menjadi up-cased, dan bidang 2-byte mewakili karakter Unicode yang diperbarui.
128 karakter Unicode pertama memiliki pemetaan wajib (lihat Tabel 24). Tabel up-case yang memiliki pemetaan karakter lain untuk salah satu dari 128 karakter Unicode pertama tidak valid.
Implementasi yang hanya mendukung karakter dari rentang pemetaan wajib dapat mengabaikan pemetaan tabel up-case lainnya. Implementasi tersebut hanya akan menggunakan karakter dari rentang pemetaan wajib saat membuat atau mengganti nama file (melalui entri direktori Nama File, lihat Bagian 7.7). Ketika up-casing nama file yang ada, implementasi tersebut tidak akan up-case karakter dari rentang pemetaan non-wajib, tetapi harus membiarkannya utuh dalam nama file yang dihasilkan dari huruf besar/kecil (ini adalah up-casing parsial). Saat membandingkan nama file, implementasi tersebut akan memperlakukan nama file yang berbeda dari nama di bawah perbandingan hanya dengan karakter Unicode dari rentang pemetaan yang tidak wajib yang setara. Meskipun nama file tersebut hanya berpotensi setara, implementasi tersebut tidak dapat memastikan nama file yang sepenuhnya ditingkatkan tidak bertabrakan dengan nama di bawah perbandingan.
Tabel 24 Wajib 128 entri tabel up-case pertama
Indeks tabel | + 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 |
(Catatan: entri dengan pemetaan kasus up-identity non-identitas dalam huruf tebal)
Setelah memformat volume, implementasi dapat menghasilkan tabel up-case dalam format terkompresi menggunakan kompresi pemetaan identitas, karena sebagian besar ruang karakter Unicode tidak memiliki konsep kasus (yang berarti karakter "huruf kecil" dan "huruf besar" setara). Implementasi mengompres tabel up-case dengan mewakili serangkaian pemetaan identitas dengan nilai FFFFh diikuti dengan jumlah pemetaan identitas.
Misalnya, implementasi dapat mewakili pemetaan karakter 100 (64 jam) pertama dengan delapan entri tabel up-case terkompresi berikut:
FFFFh, 0061h, 0041h, 0042h, 0043h
Dua entri pertama menunjukkan 97 (61h) karakter pertama (dari 0000h hingga 0060h) memiliki pemetaan identitas. Karakter berikutnya, masing-masing 0061h hingga 0063h, memetakan ke karakter 0041h hingga 0043h.
Kemampuan untuk menyediakan tabel up-case terkompresi saat memformat volume bersifat opsional. Namun, kemampuan untuk menafsirkan tabel up-case yang tidak dikompresi dan terkompresi adalah wajib. Nilai bidang TableChecksum selalu sesuai dengan bagaimana tabel up-case ada pada volume, yang mungkin dalam format terkompresi atau tidak dikompresi.
7.2.5.1 Tabel Up-case yang Direkomendasikan
Saat memformat volume, implementasi harus merekam tabel up-case yang direkomendasikan dalam format terkompresi (lihat Tabel 25), yang nilai bidang TableChecksum-nya adalah E619D30Dh.
Jika implementasi mendefinisikan tabel up-case sendiri, baik terkompresi atau tidak dikompresi, maka tabel tersebut akan mencakup rentang karakter Unicode lengkap (dari kode karakter 0000h hingga FFFFh inklusif).
Tabel 25 Tabel up-case yang direkomendasikan dalam format terkompresi
Offset mentah | + 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 | 01EH | 01EH |
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 | 03EH | 03EH |
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 Entri Direktori Label Volume
Label Volume adalah string Unicode yang memungkinkan pengguna akhir membedakan volume penyimpanan mereka. Dalam sistem file exFAT, Label Volume ada sebagai entri direktori utama penting di direktori akar (lihat Tabel 26). Jumlah entri direktori Label Volume yang valid berkisar antara 0 hingga 1.
Tabel 26 Struktur Direktori Label Volume
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.3.1 mendefinisikan kontennya. |
CharacterCount | 1 | 1 | Bidang ini wajib dan Bagian 7.3.2 mendefinisikan kontennya. |
VolumeLabel | 2 | 22 | Bidang ini wajib dan Bagian 7.3.3 mendefinisikan kontennya. |
Dicadangkan | 24 | 8 | Bidang ini wajib dan isinya dicadangkan. |
7.3.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1).
7.3.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.1).
Untuk entri direktori Label Volume, nilai yang valid untuk bidang ini adalah 3.
7.3.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.2).
Untuk entri direktori Label Volume, nilai yang valid untuk bidang ini adalah 0.
7.3.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.3).
7.3.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.4).
7.3.2 Bidang CharacterCount
Bidang CharacterCount akan berisi panjang string Unicode yang dikandung bidang VolumeLabel.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0, yang berarti string Unicode panjangnya adalah 0 karakter (yang setara dengan tanpa label volume)
Paling banyak 11, yang berarti string Unicode panjangnya 11 karakter
7.3.3 Bidang VolumeLabel
Bidang VolumeLabel akan berisi string Unicode, yang merupakan nama volume yang mudah digunakan. Bidang VolumeLabel memiliki sekumpulan karakter yang tidak valid yang sama dengan bidang FileName dari entri direktori Nama File (lihat Bagian 7.7.3).
7.4 Entri Direktori File
Entri direktori file menjelaskan file dan direktori. Mereka adalah entri direktori utama yang penting dan direktori apa pun mungkin berisi nol atau beberapa entri direktori File (lihat Tabel 27). Agar entri direktori File valid, tepat satu entri direktori Ekstensi Stream dan setidaknya satu entri direktori Nama File harus segera mengikuti entri direktori File (lihat Bagian 7.6 dan Bagian 7.7, masing-masing).
Tabel 27 File DirectoryEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.4.1 mendefinisikan kontennya. |
SecondaryCount | 1 | 1 | Bidang ini wajib dan Bagian 7.4.2 mendefinisikan kontennya. |
SetChecksum | 2 | 2 | Bidang ini wajib dan Bagian 7.4.3 mendefinisikan kontennya. |
FileAttributes | 4 | 2 | Bidang ini wajib dan Bagian 7.4.4 mendefinisikan kontennya. |
Dicadangkan1 | 6 | 2 | Bidang ini wajib dan isinya dicadangkan. |
CreateTimestamp | 8 | 4 | Bidang ini wajib dan Bagian 7.4.5 mendefinisikan kontennya. |
LastModifiedTimestamp | 12 | 4 | Bidang ini wajib dan Bagian 7.4.6 mendefinisikan kontennya. |
LastAccessedTimestamp | 16 | 4 | Bidang ini wajib dan Bagian 7.4.7 mendefinisikan kontennya. |
Create10msIncrement | 20 | 1 | Bidang ini wajib dan Bagian 7.4.5 mendefinisikan kontennya. |
LastModified10msIncrement | 21 | 1 | Bidang ini wajib dan Bagian 7.4.6 mendefinisikan kontennya. |
CreateUtcOffset | 22 | 1 | Bidang ini wajib dan Bagian 7.4.5 mendefinisikan kontennya. |
LastModifiedUtcOffset | 23 | 1 | Bidang ini wajib dan Bagian 7.4.6 mendefinisikan kontennya. |
LastAccessedUtcOffset | 24 | 1 | Bidang ini wajib dan Bagian 7.4.7 mendefinisikan kontennya. |
Dicadangkan2 | 25 | 7 | Bidang ini wajib dan isinya dicadangkan. |
7.4.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1).
7.4.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.1).
Untuk entri direktori File, nilai yang valid untuk bidang ini adalah 5.
7.4.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.2).
Untuk entri direktori File, nilai yang valid untuk bidang ini adalah 0.
7.4.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.3).
7.4.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.4).
7.4.2 Bidang SecondaryCount
Bidang SecondaryCount harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.2).
7.4.3 SetChecksum Field
Bidang SetChecksum harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.3).
7.4.4 Bidang FileAttributes
Bidang FileAttributes berisi bendera (lihat Tabel 28).
Tabel 28 Struktur Bidang FileAttributes
Nama Bidang | Offset (bit) |
Ukuran (Bit) |
Komentar |
---|---|---|---|
Baca Saja | 0 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Tersembunyi | 1 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Sistem | 2 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Dicadangkan1 | 3 | 1 | Bidang ini wajib dan isinya dicadangkan. |
Directory | 4 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Arsipkan | 5 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Dicadangkan2 | 6 | 10 | Bidang ini wajib dan isinya dicadangkan. |
7.4.5 CreateTimestamp, Create10msIncrement, dan CreateUtcOffset Fields
Dalam kombinasi, bidang CreateTimestamp dan CreateTime10msIncrement harus menjelaskan tanggal dan waktu lokal file/direktori yang diberikan dibuat. Bidang CreateUtcOffset menjelaskan offset tanggal dan waktu lokal dari UTC. Implementasi harus menetapkan bidang-bidang ini setelah pembuatan set entri direktori yang diberikan.
Bidang-bidang ini harus sesuai dengan definisi bidang Tanda Waktu, 10msIncrement, dan UtcOffset (lihat Bagian 7.4.8, Bagian 7.4.9, dan Bagian 7.4.10).
7.4.6 LastModifiedTimestamp, LastModified10msIncrement, dan LastModifiedUtcOffset Fields
Dalam kombinasi, bidang LastModifiedTimestamp dan LastModifiedTime10msIncrement harus menjelaskan tanggal dan waktu lokal konten salah satu kluster yang terkait dengan entri direktori Ekstensi Stream yang diberikan terakhir diubah. Bidang LastModifiedUtcOffset menjelaskan offset tanggal dan waktu lokal dari UTC. Implementasi harus memperbarui bidang-bidang ini:
Setelah memodifikasi konten salah satu kluster yang terkait dengan entri direktori Ekstensi Stream yang diberikan (kecuali untuk konten yang ada di luar titik yang dijelaskan bidang ValidDataLength)
Setelah mengubah nilai bidang ValidDataLength atau DataLength
Bidang-bidang ini harus sesuai dengan definisi bidang Tanda Waktu, 10msIncrement, dan UtcOffset (lihat Bagian 7.4.8, Bagian 7.4.9, dan Bagian 7.4.10).
7.4.7 LastAccessedTimestamp dan LastAccessedUtcOffset Fields
Bidang LastAccessedTimestamp harus menjelaskan tanggal dan waktu lokal konten salah satu kluster yang terkait dengan entri direktori Ekstensi Stream yang diberikan terakhir diakses. Bidang LastAccessedUtcOffset menjelaskan offset tanggal dan waktu lokal dari UTC. Implementasi harus memperbarui bidang-bidang ini:
Setelah memodifikasi konten salah satu kluster yang terkait dengan entri direktori Ekstensi Stream yang diberikan (kecuali untuk konten yang ada di luar ValidDataLength)
Setelah mengubah nilai bidang ValidDataLength atau DataLength
Implementasi harus memperbarui bidang ini setelah membaca konten salah satu kluster yang terkait dengan entri direktori Ekstensi Stream yang diberikan.
Bidang-bidang ini harus sesuai dengan definisi bidang Tanda Waktu dan UtcOffset (lihat Bagian 7.4.8 dan Bagian 7.4.10).
7.4.8 Bidang Tanda Waktu
Bidang tanda waktu menjelaskan tanggal dan waktu lokal, hingga resolusi dua detik (lihat Tabel 29).
Tabel 29 Struktur Bidang Tanda Waktu
Nama Bidang | Offset (bit) |
Ukuran (Bit) |
Komentar |
---|---|---|---|
DoubleSeconds | 0 | 5 | Bidang ini wajib dan Bagian 7.4.8.1 mendefinisikan kontennya. |
Menit | 5 | 6 | Bidang ini wajib dan Bagian 7.4.8.2 mendefinisikan kontennya. |
Jam | 11 | 5 | Bidang ini wajib dan Bagian 7.4.8.3 mendefinisikan kontennya. |
Hari | 16 | 5 | Bidang ini wajib dan Bagian 7.4.8.4 mendefinisikan kontennya. |
Bulan | 21 | 4 | Bidang ini wajib dan Bagian 7.4.8.5 mendefinisikan kontennya. |
Tahun | 25 | 7 | Bidang ini wajib dan Bagian 7.4.8.6 mendefinisikan kontennya. |
7.4.8.1 Bidang DoubleSeconds
Bidang DoubleSeconds harus menjelaskan bagian detik dari bidang Tanda Waktu, dalam kelipatan dua detik.
Rentang nilai yang valid untuk bidang ini adalah:
0, yang mewakili 0 detik
29, yang mewakili 58 detik
7.4.8.2 Lapangan Menit
Bidang Menit akan menjelaskan bagian menit dari bidang Tanda Waktu.
Rentang nilai yang valid untuk bidang ini adalah:
0, yang mewakili 0 menit
59, yang mewakili 59 menit
7.4.8.3 Bidang Jam
Bidang Jam akan menjelaskan bagian jam dari bidang Tanda Waktu.
Rentang nilai yang valid untuk bidang ini adalah:
0, yang mewakili 00:00 jam
23, yang mewakili 23:00 jam
7.4.8.4 Bidang Hari
Bidang Hari akan menjelaskan bagian hari dari bidang Tanda Waktu.
Rentang nilai yang valid untuk bidang ini adalah:
1, yang merupakan hari pertama dari bulan tertentu
Hari terakhir dari bulan yang diberikan (bulan tertentu menentukan jumlah hari yang valid)
7.4.8.5 Bidang Bulan
Bidang Bulan akan menjelaskan bagian bulan dari bidang Tanda Waktu.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 1, yang mewakili Januari
Paling banyak 12, yang mewakili
7.4.8.6 Bidang Tahun
Bidang Tahun akan menggambarkan bagian tahun dari bidang Tanda Waktu, relatif terhadap tahun 1980. Bidang ini menunjukkan tahun 1980 dengan nilai 0 dan tahun 2107 dengan nilai 127.
Semua nilai yang mungkin untuk bidang ini valid.
7.4.9 10ms Bidang Kenaikan
Bidang 10msIncrement harus memberikan resolusi waktu tambahan untuk bidang Tanda Waktu yang sesuai dalam kelipatan sepuluh milidetik.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0, yang mewakili 0 milidetik
Paling banyak 199, yang mewakili 1990 milidetik
7.4.10 Bidang UtcOffset
Bidang UtcOffset (lihat Tabel 30) harus menjelaskan offset dari UTC ke tanggal lokal dan waktu bidang Timestamp dan 10msIncrement yang sesuai dijelaskan. Offset dari UTC ke tanggal dan waktu lokal mencakup efek zona waktu dan penyesuaian tanggal-waktu lainnya, seperti penghematan siang hari dan perubahan waktu musim panas regional.
Tabel 30 UtcOffset Struktur Bidang
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
OffsetFromUtc | 0 | 7 | Bidang ini wajib dan Bagian 7.4.10.1mendefinisikan kontennya. |
OffsetValid | 7 | 1 | Bidang ini wajib dan Bagian 7.4.10.2 mendefinisikan kontennya. |
7.4.10.1 Bidang OffsetFromUtc
Bidang OffsetFromUtc harus menjelaskan offset dari UTC tanggal lokal dan waktu bidang Tanda Waktu dan 10msIncrement terkait berisi. Bidang ini menjelaskan offset dari UTC dalam interval 15 menit (lihat Tabel 31).
Tabel 31 Arti Dari Nilai Bidang OffsetFromUtc
Nilai | Setara Desimal Yang Ditandatangani | Deskripsi |
---|---|---|
3Fh | 63 | Tanggal dan waktu lokal adalah UTC + 15:45 |
3Eh | 62 | Tanggal dan waktu lokal adalah UTC + 15:30 |
. . . |
. . . |
. . . |
01h | 1 | Tanggal dan waktu lokal adalah UTC + 00:15 |
00h | 0 | Tanggal dan waktu lokal adalah UTC |
7Fh | -1 | Tanggal dan waktu lokal adalah UTC – 00:15 |
. . . |
. . . |
. . . |
41h | -63 | Tanggal dan waktu lokal adalah UTC – 15:45 |
40h | -64 | Tanggal dan waktu lokal adalah UTC – 16:00 |
Seperti yang ditunjukkan oleh tabel di atas, semua nilai yang mungkin untuk bidang ini valid. Namun, implementasi hanya boleh merekam nilai 00h untuk bidang ini ketika:
Tanggal dan waktu lokal sebenarnya sama dengan UTC, dalam hal ini nilai bidang OffsetValid adalah 1
Tanggal dan waktu lokal tidak diketahui, dalam hal ini nilai bidang OffsetValid adalah 1 dan implementasi harus mempertimbangkan UTC sebagai tanggal dan waktu lokal
UTC tidak diketahui, dalam hal ini nilai bidang OffsetValid adalah 0
Jika offset tanggal dan waktu lokal dari UTC kebetulan bukan kelipatan interval 15 menit, maka implementasi harus mencatat 00 jam di bidang OffsetFromUtc dan harus menganggap UTC sebagai tanggal dan waktu lokal.
7.4.10.2 Bidang OffsetValid
Bidang OffsetValid akan menjelaskan apakah konten bidang OffsetFromUtc valid atau tidak, sebagai berikut:
0, yang berarti konten bidang OffsetFromUtc tidak valid
dan akan menjadi 00h
1, yang berarti konten bidang OffsetFromUtc valid
Implementasi hanya boleh mengatur bidang ini ke nilai 0 ketika UTC tidak tersedia untuk menghitung nilai bidang OffsetFromUtc. Jika bidang ini berisi nilai 0, implementasi harus memperlakukan bidang Tanda Waktu dan 10msIncrement sebagai memiliki offset UTC yang sama dengan tanggal dan waktu lokal saat ini.
7.5 Entri Direktori GUID Volume
Entri direktori GUID Volume berisi GUID yang memungkinkan implementasi untuk membedakan volume secara unik dan terprogram. Volume GUID ada sebagai entri direktori utama jinak di direktori akar (lihat Tabel 32). Jumlah entri direktori VOLUME GUID yang valid berkisar antara 0 hingga 1.
Tabel 32 Volume GUID DirectoryEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.5.1 mendefinisikan kontennya. |
SecondaryCount | 1 | 1 | Bidang ini wajib dan Bagian 7.5.2 mendefinisikan kontennya. |
SetChecksum | 2 | 2 | Bidang ini wajib dan Bagian 7.5.3 mendefinisikan kontennya. |
GeneralPrimaryFlags | 4 | 2 | Bidang ini wajib dan Bagian 7.5.4 mendefinisikan kontennya. |
VolumeGuid | 6 | 16 | Bidang ini wajib dan Bagian 7.5.5 mendefinisikan kontennya. |
Dicadangkan | 22 | 10 | Bidang ini wajib dan isinya dicadangkan. |
7.5.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1).
Bidang TypeCode 7.5.1.1
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.1).
Untuk entri direktori VOLUME GUID, nilai yang valid untuk bidang ini adalah 0.
7.5.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.2).
Untuk entri direktori VOLUME GUID, nilai yang valid untuk bidang ini adalah 1.
7.5.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.3).
7.5.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.4).
7.5.2 Bidang SecondaryCount
Bidang SecondaryCount harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.2).
Untuk entri direktori VOLUME GUID, nilai yang valid untuk bidang ini adalah 0.
7.5.3 SetChecksum Field
Bidang SetChecksum harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.3).
7.5.4 Bidang GeneralPrimaryFlags
Bidang GeneralPrimaryFlags harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4) dan mendefinisikan konten bidang CustomDefined yang akan dicadangkan.
7.5.4.1 Bidang AlokasiPossible
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4.1).
Untuk entri direktori VOLUME GUID, nilai yang valid untuk bidang ini adalah 0.
7.5.4.2 Bidang NoFatChain
Bidang NoFatChain harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4.2).
7.5.5 Bidang VolumeGuid
Bidang VolumeGuid akan berisi GUID yang secara unik mengidentifikasi volume yang diberikan.
Semua nilai yang mungkin untuk bidang ini valid, kecuali GUID null, yaitu {00000000-0000-0000-0000-000000000000}.
7.6 Entri Direktori Ekstensi Stream
Entri direktori Ekstensi Aliran adalah entri direktori sekunder penting dalam set entri direktori File (lihat Tabel 33). Jumlah entri direktori Ekstensi Aliran yang valid dalam set entri direktori File adalah 1. Selanjutnya, entri direktori ini hanya valid jika segera mengikuti entri Direktori file.
Tabel 33 Stream Extension DirectoryEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.6.1 mendefinisikan kontennya. |
GeneralSecondaryFlags | 1 | 1 | Bidang ini wajib dan Bagian 7.6.2 mendefinisikan kontennya. |
Dicadangkan1 | 2 | 1 | Bidang ini wajib dan isinya dicadangkan. |
NameLength | 3 | 1 | Bidang ini wajib dan Bagian 7.6.3 mendefinisikan kontennya. |
NameHash | 4 | 2 | Bidang ini wajib dan Bagian 7.6.4 mendefinisikan kontennya. |
Dicadangkan2 | 6 | 2 | Bidang ini wajib dan isinya dicadangkan. |
ValidDataLength | 8 | 8 | Bidang ini wajib dan Bagian 7.6.5 mendefinisikan kontennya. |
Reserved3 | 16 | 4 | Bidang ini wajib dan isinya dicadangkan. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.6.6 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 7.6.7 mendefinisikan kontennya. |
7.6.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1).
7.6.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.1).
Untuk entri direktori Ekstensi Aliran, nilai yang valid untuk bidang ini adalah 0.
7.6.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.2).
Untuk entri direktori Ekstensi Aliran, nilai yang valid untuk bidang ini adalah 0.
7.6.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.3).
7.6.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.4).
7.6.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.6.2.1 Bidang AlokasiPossible
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.1).
Untuk entri direktori Ekstensi Aliran, nilai yang valid untuk bidang ini adalah 1.
7.6.2.2 Bidang NoFatChain
Bidang NoFatChain harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.2).
7.6.3 Bidang NameLength
Bidang NameLength harus berisi panjang string Unicode entri direktori Nama File berikutnya (lihat Bagian 7.7) yang secara kolektif berisi.
Rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 1, yang merupakan nama file terpendek yang mungkin
Paling banyak 255, yang merupakan nama file terpanjang yang mungkin
Nilai bidang NameLength juga memengaruhi nomor Entri Direktori Nama File (lihat Bagian 7.7).
7.6.4 Bidang NameHash
Bidang NameHash harus berisi hash 2-byte (lihat Gambar 4) dari nama file yang ditingkatkan. Ini memungkinkan implementasi untuk melakukan perbandingan cepat saat mencari file berdasarkan nama. Yang penting, NameHash memberikan verifikasi pasti tentang ketidakcocokan. Implementasi harus memverifikasi semua kecocokan NameHash dengan perbandingan nama file yang ditingkatkan.
Gambar 4 Komputasi 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 Bidang ValidDataLength
Bidang ValidDataLength harus menjelaskan seberapa jauh data pengguna aliran data telah ditulis. Implementasi harus memperbarui bidang ini saat mereka menulis data lebih lanjut ke aliran data. Pada media penyimpanan, data antara panjang data yang valid dan panjang data aliran data tidak ditentukan. Implementasi akan mengembalikan nol untuk operasi baca di luar panjang data yang valid.
Jika entri direktori File yang sesuai menjelaskan direktori, maka satu-satunya nilai yang valid untuk bidang ini sama dengan nilai bidang DataLength. Jika tidak, rentang nilai yang valid untuk bidang ini adalah:
Setidaknya 0, yang berarti tidak ada data pengguna yang ditulis ke aliran data
Paling banyak DataLength, yang berarti data pengguna telah ditulis ke seluruh panjang aliran data
7.6.6 BidangCluster Pertama
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.3).
Bidang ini akan berisi indeks kluster pertama aliran data, yang menghosting data pengguna.
7.6.7 Bidang DataLength
Bidang DataLength harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.4).
Jika entri direktori File yang sesuai menjelaskan direktori, maka nilai yang valid untuk bidang ini adalah seluruh ukuran alokasi terkait, dalam byte, yang mungkin 0. Selanjutnya, untuk direktori, nilai maksimum untuk bidang ini adalah 256MB.
7.7 Entri Direktori Nama File
Entri direktori Nama File adalah entri direktori sekunder penting dalam kumpulan entri direktori File (lihat Tabel 34). Jumlah entri direktori Nama File yang valid dalam kumpulan entri direktori File adalah NameLength / 15, dibulatkan ke bilangan bulat terdekat. Selanjutnya, entri direktori Nama File hanya valid jika mereka segera mengikuti entri direktori Ekstensi Stream sebagai seri berturut-turut. Entri direktori Nama File digabungkan untuk membentuk nama file untuk kumpulan entri direktori File.
Semua anak dari entri direktori tertentu harus memiliki Set Entri Direktori Nama File yang unik. Artinya, tidak boleh ada nama file atau direktori duplikat setelah up-casing dalam satu direktori.
Tabel 34 Direktori Nama FileEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.7.1 mendefinisikan kontennya. |
GeneralSecondaryFlags | 1 | 1 | Bidang ini wajib dan Bagian 7.7.2 mendefinisikan kontennya. |
FileName | 2 | 30 | Bidang ini wajib dan Bagian 7.7.3 mendefinisikan kontennya. |
7.7.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1).
7.7.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.1).
Untuk entri direktori Nama File, nilai yang valid untuk bidang ini adalah 1.
7.7.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.2).
Untuk entri direktori Nama File, nilai yang valid untuk bidang ini adalah 0.
7.7.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.3).
7.7.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.4).
7.7.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.7.2.1 Bidang AlokasiPossible
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.1).
Untuk entri direktori Ekstensi Aliran, nilai yang valid untuk bidang ini adalah 0.
7.7.2.2 Bidang NoFatChain
Bidang NoFatChain harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.2).
7.7.3 Bidang FileName
Bidang FileName harus berisi string Unicode, yang merupakan bagian dari nama file. Dalam urutan entri direktori Nama File ada dalam set entri direktori File, bidang FileName menggabungkan untuk membentuk nama file untuk kumpulan entri direktori File. Mengingat panjang bidang FileName, 15 karakter, dan jumlah maksimum entri direktori Nama File, 17, panjang maksimum nama file akhir yang digabungkan adalah 255.
Nama file yang digabungkan memiliki sekumpulan karakter ilegal yang sama dengan sistem file berbasis FAT lainnya (lihat Tabel 35). Implementasi harus mengatur karakter bidang FileName yang tidak digunakan ke nilai 0000h.
Tabel 35 Karakter NamaFile Tidak Valid
Kode Karakter | Deskripsi | Kode Karakter | Deskripsi | Kode Karakter | Deskripsi |
---|---|---|---|---|---|
0000h | Kode kontrol | 0001h | Kode kontrol | 0002h | Kode kontrol |
0003h | Kode kontrol | 0004h | Kode kontrol | 0005h | Kode kontrol |
0006h | Kode kontrol | 0007h | Kode kontrol | 0008h | Kode kontrol |
0009h | Kode kontrol | 000Ah | Kode kontrol | 000Bh | Kode kontrol |
000Ch | Kode kontrol | 000Dh | Kode kontrol | 000Eh | Kode kontrol |
000Fh | Kode kontrol | 0010h | Kode kontrol | 0011h | Kode kontrol |
0012h | Kode kontrol | 0013h | Kode kontrol | 0014h | Kode kontrol |
0015h | Kode kontrol | 0016h | Kode kontrol | 0017h | Kode kontrol |
0018h | Kode kontrol | 0019h | Kode kontrol | 001Ah | Kode kontrol |
001Bh | Kode kontrol | 001Ch | Kode kontrol | 001Dh | Kode kontrol |
001Eh | Kode kontrol | 001Fh | Kode kontrol | 0022h | Tanda kutip |
002Ah | Asterisk | 002Fh | Garis miring | 003Ah | Titik dua |
003Ch | Tanda kurang dari | 003Eh | Tanda lebih besar dari | 003Fh | Tanda tanya |
005Ch | Garis miring kembali | 007Ch | Bilah vertikal |
Nama file "." dan ".." masing-masing memiliki arti khusus dari "direktori ini" dan "berisi direktori". Implementasi tidak boleh merekam salah satu nama file yang dipesan ini di bidang FileName. Namun, implementasi dapat menghasilkan dua nama file ini dalam daftar direktori untuk merujuk ke direktori yang tercantum dan direktori yang berisi.
Implementasi mungkin ingin membatasi nama file dan direktori hanya untuk kumpulan karakter ASCII. Jika demikian, mereka harus membatasi penggunaan karakter mereka ke rentang karakter yang valid dalam 128 entri Unicode pertama. Mereka masih harus menyimpan nama file dan direktori di Unicode pada volume dan menerjemahkan ke/dari ASCII/Unicode saat berinteraksi dengan pengguna.
7.8 Entri Direktori Ekstensi Vendor
Entri direktori Ekstensi Vendor adalah entri direktori sekunder jinak dalam set entri direktori File (lihat Tabel 36). Set entri direktori File mungkin berisi sejumlah entri direktori Ekstensi Vendor, hingga batas entri direktori sekunder, lebih sedikit jumlah entri direktori sekunder lainnya. Selanjutnya, entri direktori Ekstensi Vendor hanya valid jika tidak mendahului entri direktori Ekstensi Stream dan Nama File yang diperlukan.
Entri direktori Ekstensi Vendor memungkinkan vendor untuk memiliki entri direktori khusus vendor yang unik dalam kumpulan entri direktori File individual melalui bidang VendorGuid (lihat Tabel 36). Entri direktori unik secara efektif memungkinkan vendor untuk memperluas sistem file exFAT. Vendor dapat menentukan konten bidang VendorDefined (lihat Tabel 36). Implementasi vendor dapat mempertahankan konten bidang VendorDefined dan dapat menyediakan fungsionalitas khusus vendor.
Implementasi yang tidak mengenali GUID entri direktori Ekstensi Vendor akan memperlakukan entri direktori sama dengan entri direktori sekunder jinak lainnya yang tidak dikenali (lihat Bagian 8.2).
Direktori Ekstensi Vendor Tabel 36Entry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.8.1 mendefinisikan kontennya. |
GeneralSecondaryFlags | 1 | 1 | Bidang ini wajib dan Bagian 7.8.2 mendefinisikan kontennya. |
VendorGuid | 2 | 16 | Bidang ini wajib dan Bagian 7.8.3 mendefinisikan kontennya. |
VendorDefined | 18 | 14 | Bidang ini wajib dan vendor dapat menentukan isinya. |
7.8.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1).
Bidang TypeCode 7.8.1.1
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.1).
Untuk entri direktori Ekstensi Vendor, nilai yang valid untuk bidang ini adalah 0.
7.8.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.2).
Untuk entri direktori Ekstensi Vendor, nilai yang valid untuk bidang ini adalah 1.
7.8.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.3).
7.8.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.4).
7.8.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.8.2.1 Bidang AlokasiPossible
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.1).
Untuk entri direktori Ekstensi Vendor, nilai yang valid untuk bidang ini adalah 0.
7.8.2.2 Bidang NoFatChain
Bidang NoFatChain harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.2).
7.8.3 Bidang VendorGuid
Bidang VendorGuid harus berisi GUID yang secara unik mengidentifikasi Ekstensi Vendor yang diberikan.
Semua nilai yang mungkin untuk bidang ini valid, kecuali GUID null, yaitu {00000000-0000-0000-0000-000000000000}. Namun, vendor harus menggunakan alat pembuatan GUID, seperti GuidGen.exe, untuk memilih GUID saat menentukan ekstensi mereka.
Nilai bidang ini menentukan struktur khusus vendor dari bidang VendorDefined.
7.9 Entri Direktori Alokasi Vendor
Entri direktori Alokasi Vendor adalah entri direktori sekunder jinak dalam set entri direktori File (lihat Tabel 37). Set entri direktori File mungkin berisi sejumlah entri direktori Alokasi Vendor, hingga batas entri direktori sekunder, lebih sedikit jumlah entri direktori sekunder lainnya. Selanjutnya, entri direktori Alokasi Vendor hanya valid jika tidak mendahului entri direktori Ekstensi Stream dan Nama File yang diperlukan.
Entri direktori Alokasi Vendor memungkinkan vendor untuk memiliki entri direktori khusus vendor yang unik dalam kumpulan entri direktori File individual melalui bidang VendorGuid (lihat Tabel 37). Entri direktori unik secara efektif memungkinkan vendor untuk memperluas sistem file exFAT. Vendor dapat menentukan konten kluster terkait, jika ada. Implementasi vendor dapat mempertahankan konten kluster terkait, jika ada, dan dapat menyediakan fungsionalitas khusus vendor.
Implementasi yang tidak mengenali GUID entri direktori Alokasi Vendor akan memperlakukan entri direktori sama dengan entri direktori sekunder jinak lainnya yang tidak dikenal (lihat Bagian 8.2).
Tabel 37 Direktori Alokasi VendorEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
EntryType | 0 | 1 | Bidang ini wajib dan Bagian 7.9.1 mendefinisikan kontennya. |
GeneralSecondaryFlags | 1 | 1 | Bidang ini wajib dan Bagian 7.9.2 mendefinisikan kontennya. |
VendorGuid | 2 | 16 | Bidang ini wajib dan Bagian 7.9.3 mendefinisikan kontennya. |
VendorDefined | 18 | 2 | Bidang ini wajib dan vendor dapat menentukan isinya. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.9.4 mendefinisikan kontennya. |
DataLength | 24 | 8 | Bidang ini wajib dan Bagian 7.9.5 mendefinisikan kontennya. |
7.9.1 Bidang EntryType
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1).
7.9.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.1).
Untuk entri direktori Alokasi Vendor, nilai yang valid untuk bidang ini adalah 1.
7.9.1.2 Bidang TypeImportance
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.2).
Untuk entri direktori Alokasi Vendor, nilai yang valid untuk bidang ini adalah 1.
7.9.1.3 Bidang TypeCategory
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.3).
7.9.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.1.4).
7.9.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.9.2.1 Bidang AlokasiPossible
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.1).
Untuk entri direktori Alokasi Vendor, nilai yang valid untuk bidang ini adalah 1.
7.9.2.2 Bidang NoFatChain
Bidang NoFatChain harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.2.2).
7.9.3 Bidang VendorGuid
Bidang VendorGuid harus berisi GUID yang secara unik mengidentifikasi Alokasi Vendor yang diberikan.
Semua nilai yang mungkin untuk bidang ini valid, kecuali GUID null, yaitu {00000000-0000-0000-0000-000000000000}. Namun, vendor harus menggunakan alat pembuatan GUID, seperti GuidGen.exe, untuk memilih GUID saat menentukan ekstensi mereka.
Nilai bidang ini menentukan struktur khusus vendor dari konten kluster terkait, jika ada.
7.9.4 BidangCluster Pertama
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.3).
7.9.5 Bidang DataLength
Bidang DataLength harus sesuai dengan definisi yang disediakan dalam templat Direktori Sekunder Generik (lihat Bagian 6.4.4).
7.10 Entri Direktori Padding TexFAT
Spesifikasi ini, exFAT Revisi 1.00 Spesifikasi Dasar Sistem File, tidak menentukan entri direktori Padding TexFAT. Namun, kode jenisnya adalah 1 dan jenis kepentingannya adalah 1. Implementasi spesifikasi ini harus memperlakukan entri direktori Padding TexFAT sama dengan entri direktori utama jinak lain yang tidak dikenal, implementasi tidak boleh memindahkan entri direktori Padding TexFAT.
8 Catatan Implementasi
8.1 Urutan Tulis yang Direkomendasikan
Implementasi harus memastikan volume setahan mungkin terhadap kesalahan daya dan kegagalan lain yang tidak dapat ditolak. Saat membuat entri direktori baru atau memodifikasi alokasi kluster, implementasi umumnya harus mengikuti urutan penulisan ini:
Atur nilai bidang VolumeDirty ke 1
Perbarui FAT aktif, jika perlu
Memperbarui Bitmap Alokasi aktif
Membuat atau memperbarui entri direktori, jika perlu
Hapus nilai bidang VolumeDirty ke 0, jika nilainya sebelum langkah pertama adalah 0
Saat menghapus entri direktori atau membebaskan alokasi kluster, implementasi harus mengikuti urutan penulisan ini:
Atur nilai bidang VolumeDirty ke 1
Menghapus atau memperbarui entri direktori, jika perlu
Perbarui FAT aktif, jika perlu
Memperbarui Bitmap Alokasi aktif
Hapus nilai bidang VolumeDirty ke 0, jika nilainya sebelum langkah pertama adalah 0
8.2 Implikasi Entri Direktori yang Tidak Dikenal
Spesifikasi exFAT di masa mendatang dari nomor revisi utama yang sama, 1, dan nomor revisi minor yang lebih tinggi dari 0, dapat menentukan entri direktori primer jinak, sekunder kritis, dan sekunder jinak baru. Hanya spesifikasi exFAT dari nomor revisi utama yang lebih tinggi yang dapat menentukan entri direktori utama penting baru. Implementasi spesifikasi ini, exFAT Revisi 1.00 Spesifikasi Dasar Sistem File, harus dapat memasang dan mengakses volume exFAT dari revisi utama nomor 1 dan nomor revisi kecil apa pun. Ini menyajikan skenario di mana implementasi mungkin mengalami entri direktori yang tidak dikenalinya. Berikut ini menjelaskan implikasi dari skenario ini:
Kehadiran entri direktori utama penting yang tidak dikenali di direktori akar membuat volume tidak valid. Kehadiran entri direktori utama penting apa pun, kecuali entri direktori File, di direktori non-akar apa pun, membuat direktori hosting tidak valid.
Implementasi tidak boleh memodifikasi entri direktori utama jinak yang tidak dikenal atau alokasi kluster terkait. Namun, saat menghapus direktori, dan hanya saat menghapus direktori, implementasi harus menghapus entri direktori utama jinak yang tidak dikenal dan membebaskan semua alokasi kluster terkait, jika ada.
Implementasi tidak boleh memodifikasi entri direktori sekunder penting yang tidak dikenal atau alokasi kluster terkait. Kehadiran satu atau beberapa entri direktori sekunder penting yang tidak dikenali dalam set entri direktori membuat seluruh set entri direktori tidak dikenali. Saat menghapus set entri direktori yang berisi satu atau beberapa entri direktori sekunder penting yang tidak dikenali, implementasi akan membebaskan semua alokasi kluster, jika ada, yang terkait dengan entri direktori sekunder kritis yang tidak dikenal. Selanjutnya, jika set entri direktori menjelaskan direktori, implementasi dapat:
Melintasi ke direktori
Menghitung entri direktori yang dikandungnya
Menghapus entri direktori yang terkandung
Pindahkan entri direktori yang terkandung ke direktori lain
Namun, implementasi tidak boleh:
Ubah entri direktori yang terkandung, kecuali hapus, seperti yang disebutkan
Membuat entri direktori baru yang terkandung
Buka entri direktori mandiri, kecuali melintasi dan menghitung, seperti yang disebutkan
Implementasi tidak boleh memodifikasi entri direktori sekunder jinak yang tidak dikenal atau alokasi kluster terkait. Implementasi harus mengabaikan entri direktori sekunder jinak yang tidak dikenal. Saat menghapus set entri direktori, implementasi akan membebaskan semua alokasi kluster, jika ada, yang terkait dengan entri direktori sekunder jinak yang tidak dikenal.
9 Batas Sistem File
9.1 Batas Ukuran Sektor
Bidang BytesPerSectorShift menentukan batas ukuran sektor bawah dan atas (yang mengevaluasi ke batas bawah: 512 byte; batas atas: 4.096 byte).
9.2 Batas Ukuran Kluster
Bidang SectorsPerClusterShift mendefinisikan batas ukuran kluster bawah dan atas (batas bawah: 1 sektor; batas atas: 25 -- Sektor BytesPerSectorShift, yang mengevaluasi hingga 32MB).
9.3 Batas Ukuran Timbunan Kluster
Tumpukan Kluster harus berisi setidaknya cukup ruang untuk menghosting struktur sistem file dasar berikut: direktori akar, semua Bitmap Alokasi, dan Tabel Huruf Besar.
Batas ukuran Cluster Heap yang lebih rendah adalah fungsi dari batas ukuran yang lebih rendah dari masing-masing struktur sistem file dasar yang berada di Cluster Heap. Bahkan mengingat kluster sekecil mungkin (512 byte), masing-masing struktur sistem file dasar membutuhkan tidak lebih dari satu kluster. Oleh karena itu, batas bawahnya adalah: 2 + kluster NumberOfFats, yang mengevaluasi ke 3 atau 4 kluster, tergantung pada nilai bidang NumberOfFats.
Batas ukuran Tumpukan Kluster atas adalah fungsi sederhana dari jumlah kluster maksimum yang mungkin, yang ditentukan bidang ClusterCount (batas atas: 232- 11 kluster). Terlepas dari ukuran kluster, timbunan kluster seperti itu memiliki ruang yang cukup untuk setidaknya menghosting struktur sistem file dasar.
9.4 Batas Ukuran Volume
Bidang VolumeLength menentukan batas ukuran volume bawah dan atas (batas bawah: 2 sektorBytesPerSectorShift2 20/2, yang mengevaluasi hingga 1MB; batas atas: 264- 1 sektor, yang, mengingat ukuran sektor terbesar yang mungkin, mengevaluasi menjadi sekitar 64ZB). Namun, spesifikasi ini merekomendasikan tidak lebih dari 2 kluster24- 2 di Cluster Heap (lihat Bagian 3.1.9). Oleh karena itu, batas atas volume yang direkomendasikan adalah: ClusterHeapOffset + (224- 2) * 2SectorsPerClusterShift. Mengingat ukuran kluster terbesar yang mungkin, 32MB, dan dengan asumsi ClusterHeapOffset adalah 96MB (cukup ruang untuk wilayah Boot Utama dan Cadangan dan hanya FAT Pertama), batas atas volume yang direkomendasikan dievaluasi menjadi sekitar 512 TB.
9.5 Batas Ukuran Direktori
Bidang DataLength dari entri direktori Ekstensi Aliran menentukan batas ukuran direktori bawah dan atas (batas bawah: 0 byte; batas atas: 256MB). Ini berarti direktori dapat menghosting hingga 8.388.608 entri direktori (setiap entri direktori mengonsumsi 32 byte). Mengingat kumpulan entri direktori File sekecil mungkin, tiga entri direktori, direktori dapat menghosting hingga 2.796.202 file.
10 Lampiran
10.1 Pengidentifikasi Unik Global (GUID)
GUID adalah implementasi Microsoft dari pengidentifikasi unik universal. GUID adalah nilai 128-bit yang terdiri dari satu grup 8 digit heksadesimal, diikuti oleh tiga kelompok masing-masing 4 digit heksadesimal, dan diikuti oleh satu grup 12 digit heksadesimal, misalnya {6B29FC40-CA47-1067-B31D-00DD010662DA}, (lihat Tabel 38).
Tabel 38 Struktur GUID
Nama Bidang | Offset (byte) |
Ukuran (Byte) |
Komentar |
---|---|---|---|
Data1 | 0 | 4 | Bidang ini wajib dan berisi empat byte dari grup pertama GUID (6B29FC40h dari contoh). |
Data2 | 4 | 2 | Bidang ini wajib dan berisi dua byte dari grup kedua GUID (CA47h dari contoh). |
Data3 | 6 | 2 | Bidang ini wajib dan berisi dua byte dari grup ketiga GUID (1067h dari contoh). |
Data4[0] | 8 | 1 | Bidang ini wajib dan berisi byte paling signifikan dari grup keempat GUID (B3h dari contoh). |
Data4[1] | 9 | 1 | Bidang ini wajib dan berisi byte yang paling tidak signifikan dari grup keempat GUID (1Dh dari contoh). |
Data4[2] | 10 | 1 | Bidang ini wajib dan berisi byte pertama dari grup kelima GUID (00h dari contoh). |
Data4[3] | 11 | 1 | Bidang ini wajib dan berisi byte kedua dari grup kelima GUID (DDh dari contoh). |
Data4[4] | 12 | 1 | Bidang ini wajib dan berisi byte ketiga dari grup kelima GUID (01h dari contoh). |
Data4[5] | 13 | 1 | Bidang ini wajib dan berisi byte keempat dari grup kelima GUID (06h dari contoh). |
Data4[6] | 14 | 1 | Bidang ini wajib dan berisi byte kelima dari grup kelima GUID (62h dari contoh). |
Data4[7] | 15 | 1 | Bidang ini wajib dan berisi byte keenam dari grup kelima GUID (DAh dari contoh). |
10.2 Tabel Partisi
Untuk memastikan interoperabilitas volume exFAT dalam serangkaian skenario penggunaan yang luas, implementasi harus menggunakan jenis partisi 07h untuk penyimpanan partisi MBR dan GUID partisi {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} untuk penyimpanan yang dipartisi GPT.
11 Riwayat Perubahan Dokumentasi
Tabel 39 menjelaskan riwayat rilis, koreksi ke, penambahan, penghapusan dari, dan klarifikasi dokumen ini.
Riwayat Perubahan Dokumentasi Tabel 39
Tanggal | Deskripsi Perubahan |
---|---|
08-Jan-2008 | Rilis pertama Spesifikasi Dasar, yang meliputi: Bagian 1, Pengantar Bagian 2, Bagian 3, Wilayah Boot Utama dan Cadangan Bagian 4, Wilayah Tabel Alokasi File Bagian 5, Wilayah Data Bagian 6, Struktur Direktori Bagian 7, Definisi Entri Direktori Bagian 8, Catatan Implementasi Bagian 9, Batas Sistem File Bagian 10, Lampiran |
08-Jun-2008 | Rilis kedua Spesifikasi Dasar, yang mencakup perubahan berikut: Penambahan Bagian 11, Penambahan entri direktori Ekstensi Vendor dan Alokasi Vendor di Bagian 7.8 dan 7.9 Penambahan tabel up-case yang direkomendasikan di Bagian 7.2.5 dan 7.2.5.1 Penambahan bidang UtcOffset di Bagian 7.4 dan penambahan akronim UTC di Bagian 1.3 Koreksi ukuran bidang CustomDefined di Tabel 19 Koreksi rentang nilai NameLength yang valid di Bagian 7.6.3 Koreksi dan klarifikasi bidang Tanda Waktu dan 10msIncrement di Bagian 7.4 Klarifikasi struktur Parameter Null di Bagian 3.3 Klarifikasi arti nilai bidang NoFatChain di Bagian 6.3.4.2 Klarifikasi arti nilai bidang DataLength di Bagian 6.2.3 Klarifikasi bidang VolumeDirty di Bagian 3.1.13.2 dan urutan tulis yang direkomendasikan di Bagian 8.1 Klarifikasi bidang MediaFailure di Bagian 3.1.13.3 |
01-Okt-2008 | Rilis ketiga Spesifikasi Dasar, yang mencakup perubahan berikut: Penambahan SHALL, SHOULD dan MAY ke penjelasan lapangan Penambahan definisi UTC dalam Tabel 2 Bagian 1.3 Bagian yang dimodifikasi 1.5, untuk memastikan penyelarasan dengan dokumen spesifikasi TexFAT. Mengklarifikasi pembatasan bahwa hanya Microsoft yang dapat menentukan tata letak Entri Direktori di Bagian 6.2 Menambahkan klarifikasi bahwa Bidang FirstCluster akan menjadi nol jika DataLength adalah nol dan NoFatChain diatur ke Bagian 6.3.5 dan Bagian 6.4.3 Persyaratan yang diklarifikasi untuk entri direktori file yang valid di Bagian 7.4 Menambahkan persyaratan untuk nama file dan direktori unik ke Bagian 7.7 Menambahkan catatan implementasi untuk ASCII ke akhir Bagian 7.7.3 |
01-Jan-2009 | Rilis keempat Spesifikasi Dasar, yang mencakup perubahan berikut: Menghapus referensi ke entri Access Control Windows CE Menambahkan klarifikasi ke Bagian 7.2.5.1 untuk secara eksplisit memerlukan tabel kasus lengkap |
02-Sep-2009 | Rilis kelima Spesifikasi Dasar, yang mencakup perubahan berikut: Perubahan pemformatan dokumen untuk memungkinkan konversi PDF yang lebih baik |
24-Feb-2010 | Rilis keenam Spesifikasi Dasar, yang mencakup perubahan berikut: Pernyataan yang salah diubah: "Bidang FirstCluster akan menjadi nol jika DataLength nol dan NoFatChain diatur" di Bagian 6.3.5 dan Bagian 6.4.3 ke "Jika bit NoFatChain adalah 1 maka FirstCluster harus menunjuk ke kluster yang valid dalam tumpukan kluster" untuk mengklarifikasi bahwa harus ada alokasi valid jika bit NoFatChain diatur. Menambahkan "Jika bit NoFatChain adalah 1 maka DataLength tidak boleh nol. Jika bidang FirstCluster adalah nol, maka DataLength juga harus nol" ke Bagian 6.3.6 dan Bagian 6.4.4 untuk mengklarifikasi bahwa harus ada alokasi yang valid jika bit NoFatChain diatur. Pemberitahuan hak cipta yang diperbarui ke 2010 |
26-Agustus-2019 | Rilis ketujuh Spesifikasi Dasar, yang mencakup perubahan berikut: Memperbarui persyaratan hukum yang berkaitan dengan spesifikasi, termasuk: Penghapusan pemberitahuan Rahasia Microsoft Penghapusan bagian Perjanjian Lisensi Dokumentasi Teknis Microsoft Corporation Pemberitahuan hak cipta yang diperbarui ke 2019 |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk