Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
1 Pengantar
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 relatif sederhana dan mudah diimplementasikan.
Aktifkan file dan perangkat penyimpanan yang sangat besar.
Sistem file exFAT menggunakan 64 bit untuk menjelaskan 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 Spesifik
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
Istilah | Definisi |
---|---|
Harus | Spesifikasi ini menggunakan istilah "harus" untuk menggambarkan perilaku yang wajib. |
Sebaiknya | 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 harus dimodifikasi implementasi dan harus ditafsirkan seperti yang dijelaskan spesifikasi ini. |
Fakultatif | Istilah ini menjelaskan bidang atau struktur yang mungkin atau tidak didukung implementasi. Jika implementasi mendukung bidang atau struktur opsional tertentu, itu akan memodifikasi dan harus menginterpretasikan bidang atau struktur seperti yang dijelaskan spesifikasi ini. |
Tidak terdefinisi | Istilah ini menjelaskan isi bidang atau struktur yang implementasinya dapat memodifikasi seperlunya (yaitu jelas hingga nol saat mengatur bidang atau struktur di sekitarnya) dan tidak boleh menafsirkan untuk menyimpan arti tertentu. |
Sudah Dipesan | 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 Input Output Dasar |
CPU | Unit Pemrosesan Pusat |
exFAT | Tabel Alokasi File yang dapat diperluas |
GEMUK | Tabel Alokasi File |
FAT12 | Tabel Alokasi File, indeks kluster 12-bit |
FAT16 | Tabel Alokasi File, indeks kluster berukuran 16-bit |
FAT32 | Tabel Alokasi File, kluster dengan indeks 32-bit |
GPT | Tabel Partisi GUID |
GUID | Pengidentifikasi Unik Global (lihat Bagian 10.1) |
INT | Menyela |
MBR | Catatan Boot Master |
texFAT | ExFAT aman transaksi |
UTC | Coordinated Universal Time |
1.4 Kualifikasi Bidang dan Struktur Bawaan
Bidang dan struktur dalam spesifikasi ini memiliki kualifikasi berikut (lihat daftar di bawah), kecuali jika catatan spesifikasi sebaliknya.
Belum ditandatangani
Gunakan notasi desimal untuk menjelaskan nilai, kecuali dinyatakan lain; spesifikasi ini menggunakan huruf 'h' di belakang untuk menunjukkan angka heksadesimal dan memasukkan GUID dalam kurung kurawal.
Dalam format little-endian
Tidak memerlukan karakter penutup null 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 buah 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 kumpulan 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 |
---|---|---|---|
Area 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 dikhususkan. |
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. |
Mencadangkan Parameter OEM | 21 | 1 | Sub-wilayah ini wajib dan Bagian 3.3 mendefinisikan kontennya. |
Cadangan yang Direservasi | 22 | 1 | Sub-wilayah ini wajib dan isinya dikhususkan. |
Backup Boot Checksum | Dua puluh tiga | 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 | PanjangLemak | 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 * 2SectorsPerClusterShift | 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 * 2SectorsPerClusterShift) | Sub-wilayah ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan 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:
- Memulai 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 konten bidang VolumeFlags dan PercentInUse sebagai usang.
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.
Meskipun 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 Boot Checksum 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. |
Offset Partisi | 64 | 8 | Bidang ini wajib dan Bagian 3.1.4 mendefinisikan kontennya. |
Panjang Volume | 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. |
PanjangLemak | 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. |
Jumlah Klaster | 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. |
PersentasePenggunaan | 112 | 1 | Bidang ini wajib dan Bagian 3.1.18 mendefinisikan kontennya. |
Sudah Dipesan | 113 | 7 | Bidang ini wajib dan isinya dibatasi. |
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 | 2BytesPerSectorShift – 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 dari yang terendah ke yang tertinggi) 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 wajib langsung sesuai dengan rentang byte blok parameter BIOS yang terkompresi yang digunakan 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 menjelaskan offset sektor relatif media dari partisi yang menghosting volume exFAT yang diberikan. Bidang ini membantu proses memulai 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 PanjangVolume
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) *2SectorsPerClusterShift.
3.1.6 Bidang FatOffset
Bidang FatOffset harus menjelaskan offset sektor relatif terhadap volume 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 merupakan sektor yang digunakan oleh wilayah Boot Utama dan Boot Cadangan
- Paling banyak ClusterHeapOffset - (FatLength * NumberOfFats), yang menghitung sektor yang dikonsumsi oleh Cluster Heap
3.1.7 Bidang PanjangLemak
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 / 2BytesPerSectorShift dibulatkan ke bilangan bulat terdekat, yang memastikan setiap FAT memiliki ruang yang cukup untuk menjelaskan semua kluster di dalam Tumpukan Kluster
- Paling banyak (ClusterHeapOffset - FatOffset) / NumberOfFats dibulatkan ke bilangan bulat terdekat, yang memastikan FATs ada sebelum Tumpukan Kluster
Bidang ini mungkin berisi nilai melebihi batas bawahnya (seperti yang dijelaskan di atas) untuk mengaktifkan FAT Kedua jika ada, agar juga diselaraskan dengan karakteristik media penyimpanan dasar. Isi ruang yang melebihi apa yang dibutuhkan FAT itu sendiri, jika ada, tidak terdefinisi.
3.1.8 Bidang ClusterHeapOffset
Bidang ClusterHeapOffset harus menjelaskan offset sektor relatif volume dari Tumpukan Kluster. 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 memperhitungkan sektor yang dikonsumsi semua wilayah sebelumnya
- Paling banyak 232- 1 atau VolumeLength - (ClusterCount * 2SectorsPerClusterShift), mana pun hasil perhitungan yang lebih kecil
Bidang JumlahKluster
Bidang ClusterCount harus menjelaskan jumlah kluster yang dikandung Oleh Cluster Heap.
Nilai yang valid untuk bidang ini akan menjadi lebih rendah dari yang berikut:
- (VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShift dibulatkan ke bawah ke bilangan bulat terdekat, yang merupakan jumlah kluster yang dapat muat antara awal Cluster Heap dan akhir volume
- 232- 11, yang merupakan jumlah maksimum kluster yang dapat dijelaskan FAT
Nilai bidang ClusterCount menentukan ukuran minimum FAT. Untuk menghindari FAT yang sangat besar, implementasi dapat mengontrol jumlah kluster dalam Tumpukan Kluster dengan meningkatkan ukuran kluster (melalui bidang SectorsPerClusterShift). Spesifikasi ini merekomendasikan tidak lebih dari 224-2 kluster di Cluster Heap. Namun, implementasi harus dapat menangani volume dengan hingga 2^32 - 11 kluster dalam Cluster Heap.
Bidang FirstClusterOfRootDirectory
Bidang FirstClusterOfRootDirectory harus berisi indeks kluster pertama dari direktori induk. Implementasi harus melakukan setiap upaya untuk menempatkan kluster pertama direktori akar di kluster pertama yang tidak buruk setelah kluster Bitmap Alokasi dan Tabel Kasus Naik digunakan.
Rentang nilai yang valid untuk bidang ini adalah:
- Setidaknya 2, indeks kluster pertama di Timbunan Kluster
- 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 bersifat spesifik implementasi.
Semua nilai yang mungkin untuk bidang ini valid.
3.1.12 Bidang Revisi Sistem Berkas
Bidang FileSystemRevision harus menjelaskan jumlah revisi utama dan kecil dari struktur exFAT pada volume yang diberikan.
Byte urutan tinggi adalah nomor revisi utama dan byte urutan rendah adalah angka revisi kecil. Misalnya, jika byte urutan tinggi berisi nilai 01h dan jika byte urutan rendah berisi nilai 05h, maka bidang FileSystemRevision menjelaskan nomor revisi 1,05. Demikian juga, jika byte urutan tinggi berisi nilai 0Ah dan jika byte urutan rendah berisi nilai 0Fh, maka 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 harus berisi bendera yang menunjukkan status berbagai struktur sistem file pada volume exFAT (lihat Tabel 5).
Implementasi tidak boleh menyertakan bidang ini saat menghitung checksum wilayah Boot Utama atau Boot Cadangan masing-masing. Ketika merujuk pada Sektor Boot Cadangan, implementasi harus memperlakukan bidang ini sebagai usang.
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. |
Kegagalan Media | 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. |
Sudah Dipesan | 4 | 12 | Bidang ini wajib dan isinya dibatasi. |
3.1.13.1 Bidang ActiveFat
Bidang ActiveFat harus menjelaskan FAT dan Bitmap Alokasi mana yang aktif (dan harus digunakan oleh implementasi), 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 yang tidak aktif sebagai kedaluwarsa. Hanya implementasi yang mendukung TexFAT yang akan mengalihkan FAT dan Bitmap Alokasi yang aktif (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 ketika mereka menemukan inkonsistensi metadata sistem file yang tidak mereka dapat 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 Kegagalan Media
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 operasi baca atau tulis mengalami kegagalan)
Implementasi harus mengatur bidang ini ke 1 ketika:
- Media hosting gagal melakukan upaya akses ke wilayah mana pun dalam volume.
- Implementasi telah kehabisan algoritma percobaan ulang 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 BytesPerSectorShift Field
Bidang BytesPerSectorShift harus menjelaskan 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 Bidang SektorPerClusterShift
Bidang SectorsPerClusterShift harus menjelaskan 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
- Maksimum 25 - BytesPerSectorShift, yang dihitung menjadi ukuran kluster 32MB
3.1.16 Kolom Jumlah Lemak
Bidang NumberOfFats harus menjelaskan jumlah FAT dan peta bit alokasi yang ada dalam volume.
Rentang nilai yang valid untuk bidang ini adalah:
- 1, menunjukkan bahwa volume hanya berisi FAT Pertama dan Bitmap Alokasi Pertama
- 2, yang menunjukkan bahwa volume tersebut berisi FAT Pertama, FAT Kedua, Bitmap Alokasi Pertama, dan Bitmap Alokasi Kedua; nilai ini hanya berlaku untuk volume TexFAT.
3.1.17 DrivePilih Bidang
Bidang DriveSelect harus berisi nomor drive INT 13h yang diperluas, yang membantu memulai proses booting 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 Persentase penggunaan
Bidang PercentInUse harus menjelaskan persentase kluster dalam Tumpukan Kluster 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 harus mengubah nilai bidang ini untuk mencerminkan perubahan alokasi kluster dalam Tumpukan Kluster atau harus mengubahnya menjadi FFh.
Implementasi tidak boleh menyertakan bidang ini saat menghitung checksum wilayah Boot Utama atau Boot Cadangan masing-masing. Ketika merujuk pada Sektor Boot Cadangan, implementasi harus memperlakukan bidang ini sebagai usang.
3.1.19 Bidang BootCode
Bidang BootCode harus berisi instruksi boot-strapping. Implementasi dapat mengisi bidang ini dengan instruksi CPU yang diperlukan untuk memulai sistem komputer. Implementasi yang tidak memberikan instruksi untuk proses inisialisasi awal wajib menginisialisasi setiap byte dalam bidang ini ke F4h (instruksi berhenti untuk CPU yang umum di komputer pribadi) sebagai bagian dari proses pemformatan.
3.1.20 Bidang BootSignature
Bidang BootSignature akan menjelaskan apakah niat sektor tertentu adalah untuk itu menjadi Sektor Boot atau tidak.
Nilai yang valid untuk bidang ini adalah AA55h. Nilai lain dalam kolom ini membuat Sektor Boot masing-masing menjadi tidak valid. Implementasi harus memverifikasi konten bidang ini sebelum bergantung pada bidang lain di Sektor Boot masing-masing.
3.2 Sub-wilayah Utama dan Cadangan Boot Yang Diperluas
Setiap sektor pada Main Extended Boot Sectors memiliki struktur yang sama; namun, setiap sektor mungkin 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.
Sektor Boot Ekstensi Cadangan adalah cadangan dari Sektor Boot Ekstensi Utama dan memiliki struktur yang sama (lihat Tabel 6).
Sebelum menjalankan instruksi Sektor Boot Utama atau Cadangan diperpanjang, 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 Diperpanjang, implementasi dapat memperbarui sektor-sektor ini (dan juga harus memperbarui Boot Checksum masing-masing) sesuai kebutuhan.
Tabel 6 Struktur Sektor Boot Diperpanjang
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | Bidang ini wajib dan Bagian 3.2.1 mendefinisikan kontennya. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang BytesPerSectorShift. |
Tanda Tangan Boot Ekstensi | 2BytesPerSectorShift – 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 Kode Boot Diperpanjang
Bidang ExtendedBootCode harus berisi instruksi pemulaian. Implementasi dapat mengisi bidang ini dengan instruksi CPU yang diperlukan untuk memulai 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 Bidang ExtendedBootSignature
Bidang ExtendedBootSignature akan menjelaskan apakah sektor yang diberikan dimaksudkan untuk menjadi Extended Boot Sector atau tidak.
Nilai yang valid untuk bidang ini adalah AA550000h. Nilai lain di kolom ini merusak Sektor Boot Utama atau Cadangan yang Diperluas. Implementasi harus memverifikasi isi dari kolom ini sebelum mengandalkan kolom lain di Extended Boot Sector masing-masing.
Parameter OEM Utama dan Cadangan Subregional
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. |
Sudah Dipesan | 480 (empat ratus delapan puluh) | 2BytesPerSectorShift – 480 | Bidang ini wajib dan isinya dibatasi. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang BytesPerSectorShift. |
3.3.1 Parameter[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 harus dijelaskan sebagai berisi struktur Parameter Null (lihat Bagian 3.3.3).
3.3.2 Templat Parameter Umum
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.
Tabel 8 Templat Parameter Generik
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
ParameterGUID | 0 | 16 | Bidang ini wajib dan Bagian 3.3.2.1 mendefinisikan kontennya. |
DidefinisikanSecaraKustom | 16 | 32 | Bidang ini wajib dan struktur yang berasal dari templat ini menentukan isinya. |
3.3.2.1 Bidang ParametersGuid
Bidang ParametersGuid akan 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 mengambil struktur parameter kustom dari templat ini.
3.3.3 Parameter Nol
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 |
---|---|---|---|
ParameterGUID | 0 | 16 | Bidang ini wajib dan Bagian 3.3.3.1 mendefinisikan kontennya. |
Sudah Dipesan | 16 | 32 | Bidang ini wajib dan isinya dibatasi. |
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 flash 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 selama pemformatan media.
Dukungan untuk struktur Parameter Flash bersifat opsional.
Tabel 10 Struktur Parameter Flash
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
ParameterGUID | 0 | 16 | Bidang ini wajib dan Bagian 3.3.4.1 mendefinisikan kontennya. |
Ukuran HapusBlock | 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. |
WaktuPemrograman | 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. |
Sudah Dipesan | 44 | 4 | Bidang ini wajib dan isinya dibatasi. |
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 HapusBlockSize Bidang
Bidang EraseBlockSize harus menggambarkan ukuran, dalam byte, dari blok penghapusan media flash.
3.3.4.3 Bidang Ukuran Halaman
Bidang PageSize akan menjelaskan ukuran halaman media flash dalam byte.
3.3.4.4 Bidang SpareSectors
Bidang SpareSectors harus menjelaskan jumlah sektor yang dimiliki media flash yang tersedia untuk operasi penghematan internalnya.
3.3.4.5 Bidang RandomAccessTime
Bidang RandomAccessTime harus menjelaskan waktu akses acak rata-rata media flash, dalam nanodetik.
3.3.4.6 Bidang ProgrammingTime
Bidang ProgrammingTime harus menjelaskan waktu pemrograman rata-rata media flash, dalam nanodetik.
3.3.4.7 Bidang Siklus Pembacaan
Bidang ReadCycle harus menjelaskan waktu siklus baca rata-rata media flash, dalam nanodetik.
3.3.4.8 Bidang Siklus Tulis
Bidang WriteCycle akan menjelaskan 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 dari 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 dari checksum empat byte mengisi sub-wilayah Boot Checksum masing-masing, dimulai dari awal hingga akhir sub-wilayah.
Sebelum menggunakan konten sub-wilayah lain di wilayah Utama atau Boot Cadangan, implementasi harus memverifikasi kontennya dengan memvalidasi Boot Checksum 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 mengandung 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 menganggap FAT yang tidak aktif sebagai basi. Penggunaan FAT yang nonaktif dan peralihan antara FAT bersifat spesifik pada implementasi.
4.1 Sub-wilayah FAT Pertama dan Kedua
FAT harus menjelaskan rantai kluster dalam Timbunan Kluster (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 dari 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 akan bisa melebihi FFFFFFF6h. Catatan: Sektor Boot Utama dan Cadangan keduanya berisi bidang ClusterCount. |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | Bidang ini wajib dan isinya, jika ada, tidak terdefinisi. Catatan: Sektor Boot Utama dan Cadangan 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 harus berisi FFh dalam tiga byte yang tersisa.
Jenis media (byte pertama) harus F8h.
4.1.2 FatEntry[1] Field
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 kontennya 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 Timbunan Kluster. FatEntry[2] mewakili kluster pertama dalam Cluster Heap dan FatEntry[ClusterCount+1] mewakili kluster terakhir dalam Cluster Heap.
Rentang nilai yang valid untuk bidang-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 yang mendahuluinya dalam rantai kluster yang diberikan
- Nilai tepat FFFFFFF7h, menunjukkan kluster yang berhubungan dengan FatEntry yang diberikan sebagai "rusak"
- Tepat FFFFFFFFh, yang mengidentifikasi 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 manapun yang telah ditentukan
5 Wilayah Data
Wilayah Data berisi Tumpukan Kluster, yang menyediakan ruang terkelola untuk struktur sistem file, direktori, dan 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 Kumpulan Kluster.
Tabel 12 Struktur Tumpukan 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] ... Kluster[ClusterCount+1] Bidang
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 sesak.
Setiap direktori terdiri dari serangkaian entri direktori (lihat Tabel 13).
Satu atau beberapa entri direktori digabungkan ke dalam kumpulan 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 Entri Direktori Generik
Templat Generic DirectoryEntry menyediakan definisi dasar untuk entri direktori (lihat Tabel 14). Semua struktur entri direktori 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 menafsirkan templat Generic DirectoryEntry adalah wajib.
Tabel 14 Templat Umum DirectoryEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 0 | 1 | Bidang ini wajib dan Bagian 6.2.1 mendefinisikan kontennya. |
DidefinisikanSecaraKustom | 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. |
PanjangData | 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 direservasi.
- Semua entri direktori berikutnya dalam direktori yang diberikan juga merupakan penanda akhir direktori
- Penanda akhir direktori hanya valid di luar kumpulan entri direktori
- Implementasi dapat menimpa penanda penutup direktori jika diperlukan.
- Antara 01h dan 7Fh termasuk, 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 mengganti entri direktori yang tidak digunakan jika perlu
- Rentang nilai ini sesuai dengan bidang InUse (lihat Bagian 6.2.1.4) yang berisi nilai 0
- Antara 81h dan FFh secara inklusif, yang merupakan entri direktori standar, 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 kumpulan 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 |
---|---|---|---|
Kode Tipe | 0 | 5 | Bidang ini wajib dan Bagian 6.2.1.1 mendefinisikan kontennya. |
JenisKepentingan | 5 | 1 | Bidang ini wajib dan Bagian 6.2.1.2 mendefinisikan kontennya. |
TipeKategori | 6 | 1 | Bidang ini wajib dan Bagian 6.2.1.3 mendefinisikan kontennya. |
Sedang Digunakan | 7 | 1 | Bidang ini wajib dan Bagian 6.2.1.4 mendefinisikan kontennya. |
Bidang TypeCode 6.2.1.1
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 sekunder penting, masing-masing)
- 1, yang berarti entri direktori yang diberikan bersifat jinak (lihat Bagian 6.3.1.2.2 untuk entri direktori primer yang jinak dan Bagian 6.4.1.2.2 untuk entri direktori sekunder yang jinak)
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 dari kluster pertama sebuah alokasi dalam Tumpukan Kluster yang terkait dengan entri direktori tersebut.
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 menafsirkan 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).
Tabel 16 Templat Entri Direktori Utama Generik
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 0 | 1 | Bidang ini wajib dan Bagian 6.3.1 mendefinisikan kontennya. |
JumlahSekunder | 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. |
DidefinisikanSecaraKustom | 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. |
PanjangData | 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 yang tidak berbahaya berisi informasi tambahan yang dapat berguna untuk pengelolaan volume exFAT. Direktori apa pun mungkin berisi entri direktori utama jinak.
Definisi entri direktori utama yang tidak berbahaya berkorelasi dengan nomor revisi kecil exFAT. Dukungan untuk setiap entri direktori utama yang tidak berbahaya yang ditentukan oleh spesifikasi ini, atau spesifikasi berikutnya, bersifat opsional. Entri direktori utama jinak yang tidak dikenal merender seluruh kumpulan entri direktori sebagai tidak dikenali (di luar definisi templat entri direktori yang berlaku).
6.3.1.3 Bidang KategoriTipe
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 merupakan satu 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 dari semua entri 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 EntrySetChecksum Computation
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 |
---|---|---|---|
Pengalokasian Mungkin | 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. |
DidefinisikanSecaraKustom | 2 | 14 | Bidang ini wajib dan struktur yang berasal dari templat ini dapat menentukan bidang ini. |
6.3.4.1 Bidang KemungkinanAlokasi
Kolom AllocationPossible harus menjelaskan apakah alokasi di dalam Cluster Heap memungkinkan 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 seperti yang didefinisikan
6.3.4.2 Bidang Rantai NoFat
Bidang NoFatChain akan menunjukkan apakah FAT aktif menjelaskan rangkaian kluster dari 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 boleh 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 kritis yang berasal dari templat ini mendefinisikan ulang bidang GeneralPrimaryFlags, maka entri FAT yang sesuai untuk rantai kluster alokasi terkait dianggap valid.
6.3.5 Bidang FirstCluster
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 PanjangData
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 Generik Entri Direktori Sekunder
Tujuan pusat entri direktori sekunder adalah untuk memberikan informasi tambahan tentang kumpulan entri direktori. Kemampuan untuk menafsirkan templat Generic Secondary DirectoryEntry adalah wajib.
Definisi entri direktori sekunder penting dan jinak berkorelasi dengan nomor revisi exFAT minor. Dukungan untuk setiap entri direktori sekunder, baik yang penting maupun jinak, yang didefinisikan oleh spesifikasi ini atau spesifikasi berikutnya adalah bersifat opsional.
Semua struktur entri direktori sekunder berasal dari templat Generic Secondary DirectoryEntry (lihat Tabel 18), yang berasal dari templat Generic DirectoryEntry (lihat Bagian 6.2).
Tabel 18 Templat Entri Direktori Sekunder Generik
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 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. |
DidefinisikanSecaraKustom | 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. |
PanjangData | 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)
6.4.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic DirectoryEntry (lihat Bagian 6.2.1.1).
6.4.1.2 Bidang PentingnyaTipe
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 Penting
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 dikenal merender seluruh entri direktori yang ditetapkan 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 Tidak Berbahaya
Entri direktori sekunder jinak berisi informasi tambahan yang mungkin berguna untuk mengelola kumpulan entri direktori yang berisinya. Dukungan untuk entri direktori sekunder jinak tertentu bersifat opsional. Entri direktori sekunder jinak yang tidak dikenali tidak menjadikan seluruh kumpulan entri direktori yang ditetapkan 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 Struktur Bidang Generik GeneralSecondaryFlags
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
Pengalokasian Mungkin | 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. |
DidefinisikanSecaraKustom | 2 | 6 | Bidang ini wajib dan struktur yang berasal dari templat ini dapat menentukan bidang ini. |
6.4.2.1 Bidang Alokasi Mungkin
Bidang AllocationPossible harus memiliki definisi yang sama dengan bidang bernama yang sama di 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 Bidang ClusterPertama
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 PanjangData
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:
- Kritis primer
- Bitmap Alokasi (Bagian 7.1)
- Tabel Up-case (Bagian 7.2)
- Label Volume (Bagian 7.3)
- File (Bagian 7.4)
- Primer utama jinak
- GUID Volume (Bagian 7.5)
- Padding TexFAT (Bagian 7.10)
- Sekunder kritis
- Ekstensi Aliran (Bagian 7.6)
- Nama File (Bagian 7.7)
- Jinak sekunder
- Ekstensi Vendor (Bagian 7.8)
- Alokasi Vendor (Bagian 7.9)
7.1 Entri Direktori Bitmap Alokasi
Dalam sistem file exFAT, FAT tidak menggambarkan status alokasi kluster; melainkan, Bitmap Alokasi yang melakukannya. 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 satu menjelaskan Bitmap Alokasi Pertama dan yang lainnya menjelaskan Bitmap Alokasi Kedua.
Tabel 20 Bitmap Alokasi Struktur Entri Direktori
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 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. |
Sudah Dipesan | 2 | 18 | Bidang ini wajib dan isinya dibatasi. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.1.3 mendefinisikan kontennya. |
PanjangData | 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).
7.1.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 Bitmap Alokasi, nilai yang valid untuk kolom 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 kolom ini adalah 0.
7.1.1.3 Bidang KategoriTipe
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. |
Sudah Dipesan | 1 | 7 | Bidang ini wajib dan isinya dibatasi. |
7.1.2.1 Bidang BitmapIdentifier
Bidang BitmapIdentifier akan menunjukkan Peta Bit Alokasi mana yang dijelaskan oleh entri direktori yang diberikan. Implementasi harus menggunakan Bitmap Alokasi Pertama bersama dengan FAT Pertama dan harus 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 Bidang FirstCluster
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 klaster, seperti yang dijelaskan oleh 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 mencatat status alokasi kluster dalam 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.
Nota
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. |
Sudah Dipesan | Jumlah Klaster | (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 dalam 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/Kecil menentukan 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 menjadi 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 Up-case Table 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.
Tabel 23 Struktur Direktori Tabel Up-caseEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 0 | 1 | Bidang ini wajib dan Bagian 7.2.1 mendefinisikan kontennya. |
Dicadangkan1 | 1 | 3 | Bidang ini wajib dan isinya dibatasi. |
TableChecksum | 4 | 4 | Bidang ini wajib dan Bagian 7.2.2 mendefinisikan kontennya. |
Dicadangkan2 | 8 | 12 | Bidang ini wajib dan isinya dibatasi. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.2.3 mendefinisikan kontennya. |
PanjangData | 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 Up-case, nilai yang valid untuk bidang ini adalah 2.
7.2.1.2 Bidang PentingnyaTipe
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.1.2).
Untuk entri direktori Tabel Up-case, nilai yang valid untuk bidang ini adalah 0.
7.2.1.3 Bidang Kategori Tipe
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 seperti yang dijelaskan oleh 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 FirstCluster
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.5).
Bidang ini berisi indeks kluster pertama 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 huruf besar adalah serangkaian pemetaan karakter Unicode. Pemetaan karakter terdiri dari bidang 2-byte, dengan indeks bidang dalam tabel up-case yang mewakili karakter Unicode yang akan diubah menjadi huruf besar, dan bidang 2-byte yang mewakili karakter Unicode yang sudah diubah menjadi huruf besar.
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 boleh menggunakan karakter dari rentang pemetaan wajib saat membuat atau mengganti nama file (melalui entri direktori Nama File, lihat Bagian 7.7). Ketika mengubah nama file yang ada menjadi huruf kapital, implementasi tersebut tidak boleh mengubah karakter dari rentang pemetaan opsional, tetapi harus membiarkannya tetap utuh dalam nama file yang dihasilkan (ini adalah pengubahan huruf kapital 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 sebagai setara. Meskipun nama file tersebut hanya berpotensi setara, implementasi tersebut tidak dapat menjamin bahwa nama file yang sepenuhnya dalam huruf besar tidak bertabrakan dengan nama yang dibandingkan.
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 bukan identitas ke huruf besar 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 berikut dari tabel up-case terkompresi:
FFFFh, 0061h, 0041h, 0042h, 0043h
Dua entri pertama menunjukkan 97 (61h) karakter pertama (dari 0000h hingga 0060h) memiliki pemetaan identitas. Karakter berikutnya, 0061h sampai 0063h, masing-masing dipetakan ke karakter 0041h sampai 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 kolom TableChecksum selalu sesuai dengan bagaimana tabel up-case ada pada volume data, yang mungkin dalam format terkompresi atau tidak terkompresi.
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 dikompresi atau tidak dikompresi, maka tabel tersebut akan mencakup rentang karakter Unicode lengkap (dari kode karakter 0000h hingga FFFFh inklusif).
Tabel 25 Direkomendasikan tabel up-case 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 | 01:00 | 01:00 | 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 | 02:16 WIB | 02:16 WIB |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | pukul 02:26 | pukul 02:26 |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428 WIB | 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 | 0428 WIB | 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 | Pukul 05:44 | 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 | Pukul 05:44 | 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 | 1 Februari |
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 | 1 Februari |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 20:00 WIB | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh (atau setara dengan Celsius jika relevan) | 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 | 2027 h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 20:30 | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 20.36 WIB | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 20:40 | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 20:47 | 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 | 20 hari 5 jam | 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 | 21.00 | 21:01 WIB | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 21.13 |
0920h | 21:14 | 21.15 | 2116h | 2117h | pukul 21:18 | 21.19 | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 21.20 | 9.21 malam | 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 | 21:47 | 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 | 07:46a | 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 Label Volume di Entri Direktori
Label Volume adalah string Unicode yang memungkinkan pengguna akhir untuk 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 VolumeEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 0 | 1 | Bidang ini wajib dan Bagian 7.3.1 mendefinisikan kontennya. |
Jumlah Karakter | 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. |
Sudah Dipesan | 24 | 8 | Bidang ini wajib dan isinya dibatasi. |
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 KategoriTipe
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 JumlahKarakter
Bidang CharacterCount akan berisi panjang string Unicode yang dimuat bidang VolumeLabel.
Rentang nilai yang valid untuk bidang ini adalah:
- Setidaknya 0, yang berarti string Unicode memiliki panjang 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 harus 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 penting dan direktori apa pun mungkin berisi nol atau lebih 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).
Tabel 27 File DirectoryEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 0 | 1 | Bidang ini wajib dan Bagian 7.4.1 mendefinisikan kontennya. |
JumlahSekunder | 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 dibatasi. |
BuatStempelWaktu | 8 | 4 | Bidang ini wajib dan Bagian 7.4.5 mendefinisikan kontennya. |
Cap Waktu Terakhir Dimodifikasi | 12 | 4 | Bidang ini wajib dan Bagian 7.4.6 mendefinisikan kontennya. |
WaktuTerakhirDiakses | 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. |
ModifikasiTerakhirInkrement10ms | 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 | Dua puluh tiga | 1 | Bidang ini wajib dan Bagian 7.4.6 mendefinisikan kontennya. |
LastAccessedUtcOffset (TerakhirDiaksesPendekatan UTC Offset) | 24 | 1 | Bidang ini wajib dan Bagian 7.4.7 mendefinisikan kontennya. |
Dicadangkan2 | Dua puluh lima | 7 | Bidang ini wajib dan isinya dibatasi. |
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 FileAttributes Struktur Bidang
Nama Bidang | Offset (bit) |
Ukuran (bit) |
Komentar |
---|---|---|---|
HanyaBaca | 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 dibatasi. |
Direktori | 4 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Arsip | 5 | 1 | Bidang ini wajib dan sesuai dengan definisi MS-DOS. |
Dicadangkan2 | 6 | 10 | Bidang ini wajib dan isinya dibatasi. |
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 mengatur bidang-bidang ini setelah pembuatan kumpulan entri direktori yang diberikan.
Bidang-bidang ini harus sesuai dengan definisi bidang Timestamp, 10msIncrement, dan UtcOffset (lihat Bagian 7.4.8, Bagian 7.4.9, dan Bagian 7.4.10, masing-masing).
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 Aliran yang diberikan (kecuali untuk konten yang ada di luar titik yang dijelaskan bidang ValidDataLength)
- Setelah Anda mengubah nilai dari bidang ValidDataLength atau DataLength
Bidang-bidang ini harus sesuai dengan definisi bidang Timestamp, 10msIncrement, dan UtcOffset (lihat Bagian 7.4.8, Bagian 7.4.9, dan Bagian 7.4.10, masing-masing).
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 Anda mengubah nilai dari 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 | Dua puluh lima | 7 | Bidang ini wajib dan Bagian 7.4.8.6 mendefinisikan kontennya. |
7.4.8.1 Bidang DoubleSeconds
Bidang DoubleSeconds akan 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 Menit Lapangan
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 yang diberikan
- Hari terakhir dari bulan yang diberikan (bulan tertentu menentukan jumlah hari yang valid)
Bidang Bulan 7.4.8.5
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 Desember
7.4.8.6 Bidang Tahun
Bidang Tahun akan menjelaskan bagian tahun dari bidang Tanda Waktu, relatif terhadap tahun 1980. Bidang ini mewakili tahun 1980 dengan nilai 0 dan tahun 2107 dengan nilai 127.
Semua nilai yang mungkin untuk bidang ini valid.
7.4.9 Bidang Inkrementasi 10ms
Kolom 10msIncrement akan menyediakan resolusi waktu tambahan ke kolom Tanda Waktu yang sesuai dalam kelipatan sepuluh milidetik.
Rentang nilai yang valid untuk bidang-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 menunjukkan offset dari UTC ke tanggal dan waktu lokal yang ditunjukkan oleh bidang Timestamp dan 10msIncrement yang sesuai. Offset dari UTC ke tanggal dan waktu lokal mencakup efek zona waktu dan penyesuaian tanggal-waktu lainnya, seperti musim panas dan perubahan waktu musim panas regional.
Tabel 30 Struktur Bidang UtcOffset
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 OffsetDromUtc Field
Bidang OffsetFromUtc harus menjelaskan offset dari UTC tanggal dan waktu lokal yang terkandung dalam bidang Tanda Waktu dan 10msIncrement terkait. Bidang ini menjelaskan offset dari UTC dalam selang 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 |
. . . |
. . . |
. . . |
01:00 | 1 | Tanggal dan waktu lokal adalah UTC + 00:15 |
00.00 | 0 | Tanggal dan waktu lokal adalah UTC |
7Fh | -1 | Tanggal dan waktu lokal adalah UTC – 00:15 |
. . . |
. . . |
. . . |
41 jam | -63 | Tanggal dan waktu lokal adalah UTC – 15:45 |
40h | -64 | Tanggal dan waktu lokal adalah UTC – 16:00 |
Seperti yang ditunjukkan 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 harus 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 harus 0
Jika offset tanggal dan waktu lokal dari UTC terjadi bukan merupakan kelipatan 15 menit, maka implementasi harus mencatat 00h di bidang OffsetFromUtc serta 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 akan memperlakukan bidang Tanda Waktu dan 10msIncrement sebagai memiliki offset UTC yang sama dengan tanggal dan waktu lokal saat ini.
Entri Direktori Volume GUID 7.5
Entri direktori GUID Volume berisi GUID yang memungkinkan implementasi untuk membedakan volume secara unik dan terprogram. GUID Volume adalah entri utama yang bersifat tidak berbahaya di direktori akar (lihat Tabel 32). Jumlah entri direktori GUID Volume yang valid berkisar antara 0 hingga 1.
Tabel 32 Volume GUID DirectoryEntry
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 0 | 1 | Bidang ini wajib dan Bagian 7.5.1 mendefinisikan kontennya. |
JumlahSekunder | 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. |
Sudah Dipesan | 22 | 10 | Bidang ini wajib dan isinya dibatasi. |
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 GUID Volume, 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 GUID Volume, 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 Hitungan Sekunder
Bidang SecondaryCount harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.2).
Untuk entri direktori GUID Volume, 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 BenderaUtamaUmum
Bidang GeneralPrimaryFlags harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.5.4.1 Bidang Alokasi Mungkin
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Generic Primary DirectoryEntry (lihat Bagian 6.3.4.1).
Untuk entri direktori GUID Volume, nilai yang valid untuk bidang ini adalah 0.
7.5.4.2 Bidang Rantai NoFat
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 harus 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 Stream Ekstensi
Entri direktori Ekstensi Aliran adalah entri direktori sekunder yang penting dalam kumpulan entri direktori File (lihat Tabel 33). Jumlah entri direktori Ekstensi Stream 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 |
---|---|---|---|
Jenis Entri | 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 dibatasi. |
PanjangNama | 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 dibatasi. |
ValidDataLength | 8 | 8 | Bidang ini wajib dan Bagian 7.6.5 mendefinisikan kontennya. |
Reserved3 | 16 | 4 | Bidang ini wajib dan isinya dibatasi. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.6.6 mendefinisikan kontennya. |
PanjangData | 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 Generic Secondary DirectoryEntry (lihat Bagian 6.4.1).
7.6.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.1).
Untuk entri direktori Ekstensi Aliran, nilai yang valid untuk bidang ini adalah 0.
7.6.1.2 Bidang JenisPenting
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.2).
Untuk entri direktori Ekstensi Aliran, nilai yang valid untuk bidang ini adalah 0.
7.6.1.3 Bidang TipeKategori
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.3).
7.6.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.4).
7.6.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.6.2.1 Bidang Alokasi Kemungkinan
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (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 Generic Secondary DirectoryEntry (lihat Bagian 6.4.2.2).
7.6.3 Bidang PanjangNama
Bidang NameLength harus berisi panjang string Unicode dari seluruh entri direktori Nama File berikutnya (lihat Bagian 7.7).
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 kasusnya. 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 akan menjelaskan seberapa jauh ke dalam aliran data data pengguna telah ditulis. Implementasi harus memperbarui bidang ini ketika menulis data lebih lanjut ke dalam 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
- Maksimal DataLength, yang berarti data pengguna telah ditulis hingga panjang penuh aliran data
7.6.6 Bidang FirstCluster
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (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 Generic Secondary DirectoryEntry (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.
Entri Nama File di Direktori
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 langsung mengikuti entri direktori Ekstensi Stream dalam seri yang bersambung. 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 ada nama file atau direktori duplikat setelah up-casing dalam satu direktori.
Tabel 34 Entri Direktori Nama File
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 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. |
nama file | 2 | 30 | Bidang ini wajib dan Bagian 7.7.3 mendefinisikan kontennya. |
7.7.1 Bidang JenisEntri
Bidang EntryType harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1).
7.7.1.1 Bidang TypeCode
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.1).
Untuk entri direktori Nama File, nilai yang valid untuk bidang ini adalah 1.
7.7.1.2 Bidang JenisKepentingan
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.2).
Untuk entri direktori Nama File, nilai yang valid untuk bidang ini adalah 0.
7.7.1.3 Bidang KategoriTipe
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.3).
7.7.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.4).
7.7.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.7.2.1 Bidang AlokasiMungkin
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.2.1).
Untuk entri direktori Nama File, nilai yang valid untuk bidang ini adalah 0.
7.7.2.2 Bidang NoFatChain
Bidang NoFatChain harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (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 yang ada dalam kumpulan entri direktori File, bidang FileName menggabung untuk membentuk nama file bagi 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 Nama File yang 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 | Tanda bintang | 002Fh | Garis miring | 003Ah | Titik dua |
003Ch | Tanda kurang-dari | 003Eh | Tanda lebih besar dari | 003Fh | Tanda tanya |
005Ch | Garis miring belakang | 007Ch | Garis vertikal |
Nama file "." dan ".." memiliki arti khusus dari "direktori ini" dan "berisi direktori", masing-masing. 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 kumpulan entri direktori File (lihat Tabel 36). Set entri direktori file dapat berisi sejumlah entri direktori ekstensi vendor, hingga jumlah maksimum entri direktori sekunder dikurangi 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 dikenal (lihat Bagian 8.2).
Entri Direktori Ekstensi Vendor Tabel 36
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 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. |
VendorDitentukan | 18 | 14 | Bidang ini wajib dan vendor dapat menentukan isinya. |
7.8.1 Bidang TipeEntri
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 Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.1).
Untuk entri direktori Ekstensi Vendor, nilai yang valid untuk bidang ini adalah 0.
7.8.1.2 Bidang JenisPenting
Bidang TypeImportance harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.2).
Untuk entri direktori Ekstensi Vendor, nilai yang valid untuk bidang ini adalah 1.
7.8.1.3 Bidang KategoriTipe
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.3).
7.8.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.4).
7.8.2 Bidang BenderaSekunderUmum
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.8.2.1 Bidang AlokasiMemungkinkan
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (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 Generic Secondary DirectoryEntry (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 yang jinak dalam set 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 unik khusus vendor 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 harus memperlakukan entri direktori sama dengan entri direktori sekunder jinak lainnya yang tidak dikenali (lihat Bagian 8.2).
Tabel 37 Alokasi Vendor Direktori Entri
Nama Bidang | Offset (byte) |
Ukuran (byte) |
Komentar |
---|---|---|---|
Jenis Entri | 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. |
VendorDitentukan | 18 | 2 | Bidang ini wajib dan vendor dapat menentukan isinya. |
FirstCluster | 20 | 4 | Bidang ini wajib dan Bagian 7.9.4 mendefinisikan kontennya. |
PanjangData | 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 Generic Secondary DirectoryEntry (lihat Bagian 6.4.1).
Bidang TypeCode 7.9.1.1
Bidang TypeCode harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (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 Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.2).
Untuk entri direktori Alokasi Vendor, nilai yang valid untuk bidang ini adalah 1.
7.9.1.3 Bidang KategoriTipe
Bidang TypeCategory harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.3).
7.9.1.4 Bidang Penggunaan
Bidang InUse harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.1.4).
7.9.2 Bidang GeneralSecondaryFlags
Bidang GeneralSecondaryFlags harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.2) dan menentukan konten bidang CustomDefined yang akan dicadangkan.
7.9.2.1 Bidang AlokasiMemungkinkan
Bidang AllocationPossible harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (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 Generic Secondary DirectoryEntry (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 Bidang FirstCluster
Bidang FirstCluster harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.3).
7.9.5 Bidang DataLength
Bidang DataLength harus sesuai dengan definisi yang disediakan dalam templat Generic Secondary DirectoryEntry (lihat Bagian 6.4.4).
7.10 Entri Direktori Pengisian TexFAT
Spesifikasi ini, Spesifikasi Dasar Sistem File exFAT Revisi 1.00, tidak menentukan entri direktori Padding TexFAT. Namun, kode jenisnya adalah 1 dan jenis kepentingannya adalah 1. Implementasi spesifikasi ini akan memperlakukan entri direktori Padding TexFAT sama dengan entri direktori utama jinak lainnya yang tidak dikenal, implementasi tidak boleh memindahkan entri direktori Padding TexFAT.
8 Catatan Implementasi
8.1 Urutan Tulis yang Direkomendasikan
Implementasi harus memastikan volume sekuat mungkin terhadap kesalahan daya dan kegagalan lain yang tidak terhindarkan. 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 yang 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 yang 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 dengan 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 yang 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 dengan nomor revisi utama 1 dan nomor revisi minor apa pun. Ini menyajikan skenario di mana implementasi mungkin menemukan entri direktori yang tidak dikenalinya. Berikut ini menjelaskan implikasi dari skenario ini:
Kehadiran entri direktori utama penting yang tidak dikenal dalam direktori root menjadikan volume penyimpanan tidak valid. Kehadiran entri direktori utama yang kritis, kecuali entri direktori File, di dalam direktori non-akar apa pun, membuat direktori yang menampung menjadi tidak valid.
Implementasi tidak boleh mengubah entri direktori utama jinak yang tidak dikenal atau alokasi kluster terkait. Namun, saat menghapus direktori, dan hanya ketika 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 dikenal dalam set entri direktori mengakibatkan seluruh set entri direktori tersebut tidak dikenali. Saat menghapus set entri direktori yang berisi satu atau beberapa entri direktori sekunder penting yang tidak dikenal, implementasi akan membebaskan semua alokasi kluster, jika ada, yang terkait dengan entri direktori sekunder penting yang tidak dikenal. Selanjutnya, jika sekumpulan entri direktori menggambarkan sebuah direktori, implementasi dapat:
- Navigasi direktori
- Menghitung entri direktori yang dikandungnya
- Hapus entri direktori yang terdapat di dalamnya
- Memindahkan 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 yang terkandung, 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 menjadi 32MB).
9.3 Batas Ukuran Timbunan Kluster
Cluster Heap harus berisi setidaknya cukup ruang untuk menghosting struktur sistem file dasar berikut: direktori akar, semua Bitmap Alokasi, dan Tabel Huruf Kapital.
Batas ukuran Tumpuk Kluster yang lebih rendah adalah fungsi dari batas ukuran yang lebih rendah dari masing-masing struktur sistem file dasar yang berada di Timbunan Kluster. 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 + NumberOfFats clusters, yang hasilnya adalah 3 atau 4 kluster, tergantung nilai dari bidang NumberOfFats.
Batas ukuran Tumpukan Kluster atas adalah fungsi sederhana dari jumlah kluster maksimum yang mungkin, yang ditentukan bidang ClusterCount (batas atas: 2kluster 32- 11). Terlepas dari ukuran kluster, timbunan kluster seperti itu memiliki ruang yang cukup untuk setidaknya menghosting struktur sistem file dasar.
9.4 Batasan Ukuran Volume
Bidang VolumeLength menentukan batas ukuran volume bawah dan atas (batas bawah: 2 sektorBytesPerSectorShift2 20/2, yang mengevaluasi ke 1MB; batas atas: 264- 1 sektor, yang, mengingat ukuran sektor terbesar yang mungkin, mengevaluasi ke sekitar 64ZB). Namun, spesifikasi ini merekomendasikan tidak lebih dari 2 kluster24- 2 di Timbunan Kluster (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 ke sekitar 512TB.
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 grup 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 diisi dan harus berisi byte ketiga dari kelompok 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 kelompok 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 partisi 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 Spesifikasi Dasar pertama, yang mencakup: 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 huruf kapitalisasi yang disarankan 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 dalam 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 1.5 yang dimodifikasi, untuk memastikan keselarasan 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 harus nol jika DataLength adalah nol dan NoFatChain seperti yang ditetapkan dalam Bagian 6.3.5 dan Bagian 6.4.3 Persyaratan klarifikasi 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 Kontrol Akses Windows CE Menambahkan klarifikasi ke Bagian 7.2.5.1 untuk secara eksplisit memerlukan tabel kasus tambahan penuh |
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 salah yang diubah: "Bidang FirstCluster harus nol jika DataLength nol dan NoFatChain diaktifkan" di Bagian 6.3.5 dan Bagian 6.4.3 menjadi "Jika bit NoFatChain adalah 1 maka FirstCluster harus menunjuk ke kluster yang valid dalam tumpukan kluster" untuk mengklarifikasi bahwa harus ada alokasi yang valid jika bit NoFatChain diaktifkan. Menambahkan "Jika bit NoFatChain adalah 1 maka DataLength tidak boleh nol. Jika bidang FirstCluster adalah nol, maka "DataLength juga harus nol" sesuai dengan 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-Agu-2019 | Rilis ketujuh Spesifikasi Dasar, yang mencakup perubahan berikut: Persyaratan hukum yang diperbarui berkaitan dengan spesifikasi, termasuk: Penghapusan pemberitahuan Rahasia Microsoft Penghapusan bagian Perjanjian Lisensi Dokumentasi Teknis Microsoft Corporation Pemberitahuan hak cipta yang diperbarui ke 2019 |