Aracılığıyla paylaş


exFAT dosya sistemi belirtimi

1 Giriş

exFAT dosya sistemi, FAT dosya sistemleri ailesinde FAT32'nin ardılıdır. Bu belirtim exFAT dosya sistemini açıklar ve exFAT dosya sistemini uygulamak için gereken tüm bilgileri sağlar.

1.1 Tasarım Hedefleri

exFAT dosya sisteminin üç merkezi tasarım hedefi vardır (aşağıdaki listeye bakın).

  1. FAT tabanlı dosya sistemlerinin basitliğini koruyun.

    FAT tabanlı dosya sistemlerinin güçlü yönlerinden ikisi, göreli basitliği ve uygulama kolaylığıdır. Öncüllerinin ruhuna göre, uygulayıcılar exFAT'ı nispeten basit ve uygulanması kolay bulmalıdır.

  2. Çok büyük dosyaları ve depolama cihazlarını etkinleştirin.

    ExFAT dosya sistemi, dosya boyutunu açıklamak için 64 bit kullanır ve böylece çok büyük dosyalara bağımlı olan uygulamaları etkinleştirir. ExFAT dosya sistemi ayrıca 32 MB kadar büyük kümelere izin verir ve çok büyük depolama cihazlarını etkili bir şekilde etkinleştirir.

  3. Gelecekteki yenilikler için genişletilebilirliği teşvik edin.

    ExFAT dosya sistemi, tasarımına genişletilebilirlik katarak dosya sisteminin depolama alanındaki yeniliklere ve kullanımdaki değişikliklere ayak uydurmasını sağlar.

1.2 Özel Terminoloji

Bu belirtim bağlamında, exFAT dosya sisteminin tasarımı ve uygulanması için belirli terimler (bkz . Tablo 1) belirli bir anlam taşır.

Tablo 1 Çok Özel Anlam Taşıyan Terimlerin Tanımı

Terim Tanım
Olmalıdır Bu belirtim, zorunlu olan bir davranışı tanımlamak için "shall" terimini kullanır.
Olmalı Bu belirtim, kesinlikle önerdiği ancak zorunlu hale getirmediği bir davranışı tanımlamak için "should" terimini kullanır.
Mayıs Bu belirtim, isteğe bağlı bir davranışı tanımlamak için "may" terimini kullanır.
Zorunlu Bu terim, bir uygulamanın değiştirip bu belirtimde açıklandığı gibi yorumladığı bir alanı veya yapıyı açıklar.
Opsiyonel Bu terim, bir uygulamanın destekleyebilecek veya desteklemeyebileceği bir alanı veya yapıyı açıklar. Bir uygulama belirli bir isteğe bağlı alan veya yapıyı destekliyorsa, bu belirtimin açıklandığı gibi alanı veya yapıyı değiştirip yorumlayacaktır.
Tanımsız Bu terim, bir uygulamanın gerektiği gibi değiştirebileceği (çevresindeki alanları veya yapıları ayarlarken sıfıra kadar açık) alan veya yapı içeriğini açıklar ve belirli bir anlamı barındıracak şekilde yorumlanmayacaktır.
Rezerve edildi

Bu terim, hangi uygulamaların uygulandığı alan veya yapı içeriğini açıklar:

  1. Sıfıra başlatılır ve herhangi bir amaç için kullanılmamalıdır

  2. Sağlama toplamlarını hesaplama dışında yorumlanmamalıdır

  3. Değişiklik yapan işlemler sırasında çevresindeki alanlar veya yapılar korunacaktır.

1.3 Ortak Kısaltmaların Tam Metni

Bu belirtim, kişisel bilgisayar sektöründe ortak kullanımda kısaltmaları kullanır (bkz . Tablo 2).

Tablo 2 Ortak Kısaltmaların Tam Metni

Kısaltma Tam Metin
ASCII Bilgi Değişimi için Amerikan Standart Kodu
BIOS Temel Giriş Çıkış Sistemi
İşlemci (CPU) Merkezi İşlem Birimi
exFAT Genişletilebilir Dosya Ayırma Tablosu
YAĞ Dosya Ayırma Tablosu
FAT12 dosya sistemi Dosya Ayırma Tablosu, 12 bit küme dizinleri
FAT16 Dosya Ayırma Tablosu, 16 bit küme dizinleri
FAT32 Dosya Ayırma Tablosu, 32 bit küme dizinleri
GPT GUID BölümLeme Tablosu
GUID Genel Benzersiz Tanımlayıcı (bkz . Bölüm 10.1)
INT Sözünü kesmek / Durdurmak
MBR Ana Önyükleme Kaydı
texFAT İşlemler için güvenli exFAT
UTC Eşgüdümlü Evrensel Saat

1.4 Varsayılan Alan ve Yapı Niteleyicileri

Belirtim aksini belirtmediği sürece, bu belirtimdeki alanlar ve yapılar aşağıdaki niteleyicilere sahiptir (aşağıdaki listeye bakın).

  1. İmzasız

  2. Sayısal değerleri tanımlamak için, aksi belirtilmediği durumlarda, ondalık gösterimi kullanın; bu belirtim, onaltılık sayıları belirtmek için son eki olarak "h" harfini kullanır ve GUID'leri küme ayracı içine alır.

  3. Küçük endian biçimindedir.

  4. Dizeler için null sonlandırıcı karakter gerektirmeyin

1.5 Windows CE ve TexFAT

TexFAT, temel dosya sisteminin üstüne işlem açısından güvenli işlem semantiği ekleyen bir exFAT uzantısıdır. TexFAT, Windows CE tarafından kullanılır. TexFAT, işlemlerde kullanılmak üzere iki FAT'nin ve ayırma bit eşlemlerinin kullanılmasını gerektirir. Ayrıca doldurma tanımlayıcıları ve güvenlik tanımlayıcıları da dahil olmak üzere çeşitli ek yapıları tanımlar.

2 Birim Yapısı

Birim, kullanıcı verilerini depolamak ve almak için gereken tüm dosya sistemi yapılarının ve veri alanının kümesidir. Tüm exFAT birimleri dört bölge içerir (bkz . Tablo 3).

Tablo 3 Birim Yapısı

Alt Bölge Adı

Uzaklık

(sektör)

Boyut

(sektörler)

Açıklamalar
Ana Önyükleme Bölgesi
Ana Önyükleme Sektörü 0 1 Bu alt bölge zorunludur ve Bölüm 3.1 içeriğini tanımlar.
Ana Genişletilmiş Önyükleme Kesimleri 1 8 Bu alt bölge zorunludur ve Bölüm 3.2) içeriğini tanımlar.
Ana OEM Parametreleri 9 1 Bu alt bölge zorunludur ve Bölüm 3.3 içeriğini tanımlar.
Ana Rezervasyon 10 1 Bu alt bölge zorunludur ve içeriği korunmuştur.
Ana Başlangıç Sağlama Toplamı 11 1 Bu alt bölge zorunludur ve Bölüm 3.4 içeriğini tanımlar.
Yedekleme Önyükleme Bölgesi
Yedek Önyükleme Sektörü 12 1 Bu alt bölge zorunludur ve Bölüm 3.1 içeriğini tanımlar.
Genişletilmiş Önyükleme Sektörlerini Yedekleme 13 (on üç) 8 Bu alt bölge zorunludur ve Bölüm 3.2 içeriğini tanımlar.
OEM Parametrelerini Yedekleme 21 1 Bu alt bölge zorunludur ve Bölüm 3.3 içeriğini tanımlar.
Yedekleme Ayrılmış 22 1 Bu alt bölge zorunludur ve içeriği korunmuştur.
Yedekleme Önyükleme Sağlama Toplamı 23 1 Bu alt bölge zorunludur ve Bölüm 3.4 içeriğini tanımlar.
FAT Bölgesi
FAT Hizalama yirmi dört FatOffset – 24

Bu alt bölge zorunludur ve varsa içeriği tanımlanmamıştır.

Not: Ana ve Yedek Önyükleme Sektörlerinin her ikisi de FatOffset alanını içerir.

İlk FAT FatOffset Yağ Uzunluğu

Bu alt bölge zorunludur ve Bölüm 4.1 içeriğini tanımlar.

Not: Ana ve Yedek Önyükleme Sektörleri hem FatOffset hem de FatLength alanlarını içerir.

İkinci FAT FatOffset + FatLength YağUzunluğu * (YağSayısı – 1)

Bu alt bölge zorunludur ve bölüm 4.1 varsa içeriğini tanımlar.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de FatOffset, FatLength ve NumberOfFats alanlarını içerir. NumberOfFats alanı yalnızca 1 ve 2 değerlerini barındırabilir.

Veri Bölgesi
Küme Yığın Hizalaması YağOfseti + YağUzunluğu * YağSayıları ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats)

Bu alt bölge zorunludur ve varsa içeriği tanımlanmamıştır.

Not: Hem Ana hem de Yedekleme Önyükleme Kesimleri FatOffset, FatLength, NumberOfFats ve ClusterHeapOffset alanlarını içerir. NumberOfFats alanının geçerli değerleri 1 ve 2'dir.

Küme Yığını ClusterHeapOffset KümeSayısı * 2KümedeSektörKaydırma

Bu alt bölge zorunludur ve Bölüm 5.1 içeriğini tanımlar.

Not: Hem Ana hem de Yedekleme Önyükleme Kesimleri ClusterHeapOffset, ClusterCount ve SectorsPerClusterShift alanlarını içerir.

Fazla Alan ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift HacimUzunluğu – (KümeYığınÖteleme + KümeSayısı * 2KümelerBaşınaSektörKaydırması)

Bu alt bölge zorunludur ve varsa içeriği tanımlanmamıştır.

Not: Hem Ana hem de Yedekleme Önyükleme Kesimleri ClusterHeapOffset, ClusterCount, SectorsPerClusterShift ve VolumeLength alanlarını içerir.

3 Ana ve Yedek Önyükleme Bölgeleri

Ana Önyükleme bölgesi, bir uygulamanın aşağıdakileri gerçekleştirmesini sağlamak için gerekli tüm önyükleme bağlama yönergelerini, tanımlama bilgilerini ve dosya sistemi parametrelerini sağlar:

  1. Bir exFAT biriminden bilgisayar sistemini başlat.
  2. Birimdeki dosya sistemini exFAT olarak belirleyin.
  3. exFAT dosya sistemi yapılarının konumunu keşfedin.

Önyükleme Yedekleme Bölgesi, Ana Önyükleme Bölgesi'nin bir yedeğidir. Ana Önyükleme bölgesinin tutarsız bir durumda olması durumunda exFAT biriminin kurtarılmasını sağlar. Önyükleme bağlama yönergelerini güncelleştirme gibi seyrek koşullar dışında, uygulamalar Yedekleme Önyükleme bölgesinin içeriğini değiştirmemelidir.

3.1 Ana ve Yedek Önyükleme Sektörü Alt Bölgeler

Ana Önyükleme Kesimi, bir exFAT biriminden önyükleme kayışı oluşturma kodunu ve birim yapısını açıklayan temel exFAT parametrelerini içerir (bkz . Tablo 4). BIOS, MBR veya diğer önyükleme kayışı aracıları bu kesimi inceler ve burada yer alan önyükleme kayışı yönergelerini yükleyip yürütebilir.

Yedekleme Önyükleme Kesimi, Ana Önyükleme Kesiminin bir yedeğidir ve aynı yapıya sahiptir (bkz . Tablo 4). Yedekleme Önyükleme Kesimi kurtarma işlemlerine yardımcı olabilir; ancak, uygulamalar VolumeFlags ve PercentInUse alanlarının içeriğini eski olarak kabul eder.

Ana veya Yedekleme Önyükleme Kesiminin içeriğini kullanmadan önce, uygulamalar ilgili Önyükleme Sağlama Toplamını doğrulayarak ve tüm alanlarının geçerli değer aralığında olduğundan emin olarak içeriklerini doğrular.

İlk biçim işlemi hem Ana hem de Yedekleme Önyükleme Sektörlerinin içeriğini başlatacak olsa da, uygulamalar gerektiğinde bu sektörleri güncelleyebilir (ve ilgili Önyükleme Kontrol Toplamını da güncelleyebilir). Ancak, uygulamalar ilgili Önyükleme Sağlama Toplamını güncelleştirmeden VolumeFlags veya PercentInUse alanlarını güncelleştirebilir (sağlama toplamı özellikle bu iki alanı dışlar).

Tablo 4 Ana ve Yedek Önyükleme Sektörü Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
JumpBoot 0 3 Bu alan zorunludur ve Bölüm 3.1.1 içeriğini tanımlar.
Dosya Sistemi Adı 3 8 Bu alan zorunludur ve Bölüm 3.1.2 içeriğini tanımlar.
MustBeZero 11 53 Bu alan zorunludur ve Bölüm 3.1.3 içeriğini tanımlar.
BölümOfseti 64 8 Bu alan zorunludur ve Bölüm 3.1.4 içeriğini tanımlar.
HacimUzunluğu 72 8 Bu alan zorunludur ve Bölüm 3.1.5 içeriğini tanımlar.
FatOffset 80 4 Bu alan zorunludur ve Bölüm 3.1.6 içeriğini tanımlar.
Yağ Uzunluğu 84 4 Bu alan zorunludur ve Bölüm 3.1.7 içeriğini tanımlar.
ClusterHeapOffset 88 4 Bu alan zorunludur ve Bölüm 3.1.8 içeriğini tanımlar.
Küme Sayısı 92 4 Bu alan zorunludur ve Bölüm 3.1.9 içeriğini tanımlar.
FirstClusterOfRootDirectory 96 4 Bu alan zorunludur ve Bölüm 3.1.10 içeriğini tanımlar.
HacimSeriNumarası 100 4 Bu alan zorunludur ve Bölüm 3.1.11 içeriğini tanımlar.
Dosya Sistemi Revizyonu 104 2 Bu alan zorunludur ve Bölüm 3.1.12 içeriğini tanımlar.
Ses Bayrakları 106 2 Bu alan zorunludur ve Bölüm 3.1.13 içeriğini tanımlar.
Bölüm Başına Bayt Kaydırma 108 1 Bu alan zorunludur ve Bölüm 3.1.14 içeriğini tanımlar.
SektörlerPerClusterShift 109 1 Bu alan zorunludur ve Bölüm 3.1.15 içeriğini tanımlar.
NumberOfFats 110 1 Bu alan zorunludur ve Bölüm 3.1.16 içeriğini tanımlar.
Sürüş Modu Seçici 111 1 Bu alan zorunludur ve Bölüm 3.1.17 içeriğini tanımlar.
KullanımYüzdesi 112 1 Bu alan zorunludur ve Bölüm 3.1.18 içeriğini tanımlar.
Rezerve edildi 113 7 Bu alan zorunludur ve içeriği saklıdır.
BootCode (Başlatma Kodu) 120 390 Bu alan zorunludur ve Bölüm 3.1.19 içeriğini tanımlar.
BootSignature 510 2 Bu alan zorunludur ve Bölüm 3.1.20 içeriğini tanımlar.
ExcessSpace 512 2BytesPerSectorShift – 512

Bu alan zorunludur ve varsa içeriği tanımlanmamıştır.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de BytesPerSectorShift alanını içerir.

3.1.1 JumpBoot Alanı

JumpBoot alanı, kişisel bilgisayarlarda yaygın olarak kullanılan CPU'lar için atlama komutunu içermelidir. Bu komut yürütüldüğünde, CPU, BootCode alanındaki önyükleme talimatlarını yürütmek üzere "atlar".

Bu alan için geçerli değer (düşük sıralı bayt ile yüksek sıralı bayt sırasına göre) EBh 76h 90h'dir.

3.1.2 FileSystemName Alanı

FileSystemName alanı birimdeki dosya sisteminin adını içermelidir.

Bu alan için geçerli değer, sondaki üç beyaz boşluğu içeren "EXFAT" ASCII karakterlerindedir.

3.1.3 MustBeZero Alanı

MustBeZero alanı, paketlenmiş BIOS parametre bloğunun FAT12/16/32 birimlerinde tükettiği bayt aralığına doğrudan karşılık gelir.

Bu alan için geçerli değer 0'dır ve bu da FAT12/16/32 uygulamalarının yanlışlıkla bir exFAT birimi bağlamasını önlemeye yardımcı olur.

3.1.4 PartitionOffset Alanı

PartitionOffset alanı, verilen exFAT birimini barındıran bölümün medya göreli kesim uzaklığını açıklar. Bu alan, kişisel bilgisayarlarda 'genişletilmiş INT 13h' kullanarak birimden önyükleme sürecine yardımcı olur.

Bu alan için tüm olası değerler geçerlidir; ancak 0 değeri, uygulamaların bu alanı yoksayması gerektiğini belirtir.

3.1.5 VolumeLength Alanı

VolumeLength alanı, sektörlerde verilen exFAT hacminin boyutunu açıklamalı.

Bu alan için geçerli değer aralığı:

  • En az 220/ 2BytesPerSectorShift, bu da en küçük hacmin 1 MB'tan az olmamasını sağlar.

  • En fazla 264- 1, bu alanın açıklayabileceğiniz en büyük değerdir.

    Ancak, Fazla Alan alt bölgesinin boyutu 0 ise, bu alanın en büyük değeri ClusterHeapOffset + (232- 11) *2SectorsPerClusterShift olur.

3.1.6 FatOffset Alanı

FatOffset alanı, İlk FAT'nin hacim göreli kesim uzaklığını açıklamalı. Bu alan, uygulamaların İlk FAT'yi temel alınan depolama medyasının özellikleriyle uyumlu hale getirmesini sağlar.

Bu alan için geçerli değer aralığı:

  • Ana Önyükleme ve Yedek Önyükleme bölgelerinin tükettiği sektörlerin toplamı en az 24'tür.
  • Küme Yığınının tükettiği kesimleri hesaplayan ClusterHeapOffset - (FatLength * NumberOfFats)

3.1.7 FatLength Alanı

FatLength alanı, hacim en fazla iki FAT içerebileceğinden, her FAT tablosunun sektörlerdeki uzunluğunu açıklar.

Bu alan için geçerli değer aralığı:

  • En az (ClusterCount + 2) * 22/ 2BytesPerSectorShiften yakın tamsayıya yuvarlanarak her FAT'nin Küme Yığınındaki tüm kümeleri tanımlamak için yeterli alana sahip olmasını sağlar
  • En fazla (ClusterHeapOffset - FatOffset) / NumberOfFats ifadesi en yakın tamsayıya yuvarlanır ve bu, FAT'lardanın Küme Yığınından önce var olmasını sağlar.

Bu alan, ikinci FAT değerinin varsa, temel depolama medyasının özelliklerine de hizalanması için alt sınırın (yukarıda açıklandığı gibi) üzerinde bir değer içerebilir. FAT'nin gerektirdiğini (varsa) aşan alanın içeriği tanımlanmamıştır.

3.1.8 ClusterHeapOffset Alanı

ClusterHeapOffset alanı, Küme Yığınının birim göreli kesim uzaklığını açıklamalı. Bu alan, uygulamaların Küme Yığınını temel alınan depolama medyasının özelliklerine hizalamasını sağlar.

Bu alan için geçerli değer aralığı:

  • Önceki tüm bölgelerin tükettiği kesimleri hesaba eklemek için en az FatOffset + FatLength * NumberOfFats
  • En fazla 232-1 veya VolumeLength - (ClusterCount * 2SectorsPerClusterShift), hangi hesaplama daha küçükse

3.1.9 ClusterCount Alanı

ClusterCount alanı, küme yığınının içerdiği küme sayısını tanımlar.

Bu alanın geçerli değeri aşağıdakilerden küçük olmalıdır:

  • (VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShift, küme yığınının başlangıcı ile birimin sonu arasında tam olarak sığabilecek küme sayısı olan en yakın tamsayıya yuvarlanır
  • 232- 11, bir FAT'nin açıklayabileceğiniz en fazla küme sayısıdır

ClusterCount alanının değeri, FAT'nin en düşük boyutunu belirler. Son derece büyük FAT'ler oluşmasını önlemek için, uygulamalar Küme Yığınındaki küme sayısını, küme boyutu artırılarak (SectorsPerClusterShift alanı aracılığıyla) denetleyebilir. Bu belirtim, Küme Yığını'nda en fazla2 24- 2 küme önerir. Ancak, uygulamalar Küme Yığınında 232- 11 kümeye kadar olan birimleri işleyebilecektir.

3.1.10 RootDirectory'nin İlk Kümesi Alanı

FirstClusterOfRootDirectory alanı, kök dizinin ilk kümesinin küme dizinini içermelidir. Uygulamalar, Ayırma Bit Eşlemi ve Büyük/Küçük Harf Tablosunun tükettiği kümelerden sonra kök dizinin ilk kümesini hatalı olmayan ilk kümeye yerleştirmek için her çabayı göstermelidir.

Bu alan için geçerli değer aralığı:

  • Küme Yığınındaki ilk kümenin dizini olan en az 2
  • En çok ClusterCount + 1, Küme Yığınındaki son kümenin dizini

3.1.11 VolumeSerialNumber Alanı

VolumeSerialNumber alanı benzersiz bir seri numarası içermelidir. Bu, farklı exFAT birimleri arasında ayrım yapmak için uygulamalara yardımcı olur. Uygulamalar, exFAT birimini biçimlendirme tarihi ve saatini birleştirerek seri numarasını oluşturmalıdır. Seri numarası oluşturmak için tarih ve saati birleştirme mekanizması uygulamaya özgüdür.

Bu alan için tüm olası değerler geçerlidir.

3.1.12 FileSystemRevision Alanı

FileSystemRevision alanı, verilen birimdeki exFAT yapılarının ana ve ikincil düzeltme numaralarını açıklar.

Yüksek sıralı bayt ana düzeltme numarası, düşük sıralı bayt ise küçük düzeltme numarasıdır. Örneğin, yüksek sıralı bayt 01h değerini içeriyorsa ve düşük sıralı bayt 05h değerini içeriyorsa, FileSystemRevision alanı 1,05 düzeltme numarasını açıklar. Benzer şekilde, yüksek sıralı bayt 0Ah değerini içeriyorsa ve düşük sıralı bayt 0Fh değerini içeriyorsa, FileSystemRevision alanı 10,15 düzeltme numarasını açıklar.

Bu alan için geçerli değer aralığı:

  • Düşük sipariş bayt için en az 0 ve yüksek sipariş bayt için 1
  • Düşük düzen baytı için en fazla 99 ve yüksek düzen baytı için en fazla 99

Bu belirtimi açıklayan exFAT düzeltme sayısı 1,00'dır. Bu belirtim uygulamaları, ana düzeltme numarası 1 olan herhangi bir exFAT birimini bağlamalı ve herhangi bir exFAT birimini başka bir ana düzeltme numarasına bağlamamalıdır. Uygulamalar küçük düzeltme numarasına uygun olacaktır ve işlem gerçekleştirmez veya verilen küçük düzeltme numarasının ilgili belirtiminde açıklanmayan herhangi bir dosya sistemi yapısı oluşturmaz.

3.1.13 VolumeFlags Alanı

VolumeFlags alanı, exFAT birimindeki çeşitli dosya sistemi yapılarının durumunu gösteren bayraklar içermelidir (bkz . Tablo 5).

Uygulamalar, ilgili Ana Önyükleme veya Yedekleme Önyükleme bölgesi sağlama toplamı hesaplanırken bu alanı içermeyecektir. Yedek Önyükleme Kesimi'ne başvururken, uygulamalar bu alanı güncelliğini yitirmiş olarak kabul edecektir.

Tablo 5 VolumeFlags Alan Yapısı

Alan Adı

Uzaklık

(bit)

Boyut

(bit)

Açıklamalar
ActiveFat 0 1 Bu alan zorunludur ve Bölüm 3.1.13.1 içeriğini tanımlar.
DiskDurumu: Kirli 1 1 Bu alan zorunludur ve Bölüm 3.1.13.2 içeriğini tanımlar.
MediaFailure 2 1 Bu alan zorunludur ve Bölüm 3.1.13.3 içeriğini tanımlar.
ClearToZero 3 1 Bu alan zorunludur ve Bölüm 3.1.13.4 içeriğini tanımlar.
Rezerve edildi 4 12 Bu alan zorunludur ve içeriği saklıdır.
3.1.13.1 ActiveFat Alanı

ActiveFat alanı, hangi FAT ve Ayırma Bit Eşleminin etkin olduğunu (ve uygulamaların kullanacağı) aşağıdaki gibi açıklayacaktır:

  • 0, yani İlk FAT ve İlk Tahsis Bit Haritası etkindir.
  • 1, yani İkinci FAT ve İkinci Ayırma Bit Eşlemi etkindir ve yalnızca NumberOfFats alanı 2 değerini içerdiğinde mümkündür

Uygulamalar, etkin olmayan FAT ve Ayırma Bit Eşlemi'ni eski olarak değerlendirecektir. Yalnızca TexFAT kullanan uygulamalar etkin FAT ve Ayırma Bit Eşlemlerini değiştirecektir (bkz . Bölüm 7.1).

3.1.13.2 VolumeDirty Alanı

VolumeDirty alanı, birimin kirli olup olmadığını aşağıdaki gibi açıklayacaktır:

  • 0, bu da hacmin büyük olasılıkla tutarlı bir durumda olduğu anlamına gelir
  • 1, bu da hacmin büyük olasılıkla tutarsız bir durumda olduğu anlamına gelir

Uygulamalar, çözümlemedikleri dosya sistemi meta veri tutarsızlıklarıyla karşılaştıklarında bu alanın değerini 1 olarak ayarlamalıdır. Birim bağlandığı zaman, bu alanın değeri 1 ise, yalnızca dosya sistemi meta veri tutarsızlıklarını çözen uygulamalar bu alanın değerini 0 olarak temizleyebilecektir. Bu tür uygulamalar, dosya sisteminin tutarlı bir durumda olduğundan emin olduktan sonra bu alanın değerini yalnızca 0 olarak temizleyecektir.

Birim bağlanıldığında bu alanın değeri 0 ise, uygulamalar dosya sistemi meta verilerini güncelleştirmeden önce bu alanı 1 olarak ayarlamalı ve daha sonra Bölüm 8.1'de açıklanan önerilen yazma sırasına benzer şekilde bu alanı 0 olarak temizlemelidir.

3.1.13.3 MediaFailure Alanı

MediaFailure alanı, bir uygulamanın medya hatalarını keşfedip keşfetmediğini aşağıdaki gibi açıklamaktadır:

  • 0, barındırma medyasının hata bildirmediği veya bilinen hataların ZATEN FAT'de "hatalı" kümeler olarak kaydedildiği anlamına gelir
  • 1, barındırma medyasının hata bildirdiği anlamına gelir (yani okuma veya yazma işlemleri başarısız oldu)

Aşağıdaki durumlarda bir uygulama bu alanı 1 olarak ayarlamalıdır:

  1. Barındırma medyası birimdeki herhangi bir bölgeye erişim girişiminde başarısız oluyor
  2. Uygulama, varsa erişim yeniden deneme algoritmalarının limitine ulaştı

Birim bağlandığı zaman bu alanın değeri 1 ise, medya hataları için birimin tamamını tarayan ve tüm hataları FAT'de "hatalı" kümeler olarak kaydeden (veya medya hatalarını başka bir şekilde çözen) uygulamalar bu alanın değerini 0 olarak temizleyebilecektir.

3.1.13.4 ClearToZero Alanı

ClearToZero alanının bu belirtimde önemli bir anlamı yoktur.

Bu alan için geçerli değerler şunlardır:

  • Belirli bir anlamı olmayan 0
  • 1, yani uygulamalar herhangi bir dosya sistemi yapılarını, dizinlerini veya dosyalarını değiştirmeden önce bu alanı 0 olarak temizler

3.1.14 BytesPerSectorShift Alanı

BytesPerSectorShift alanı, sektör başına bayt sayısını logaritma2(N) biçiminde tanımlar; burada N, sektör başına bayt sayısını belirtir. Örneğin, kesim başına 512 bayt için bu alanın değeri 9'dur.

Bu alan için geçerli değer aralığı:

  • ExFAT hacmi için mümkün olan en küçük kesim olan en az 9 (512 bayt kesim boyutu)
  • En fazla 12 (sektör boyutu 4096 bayt), kişisel bilgisayarlarda yaygın olan CPU'ların bellek sayfası boyutudur.

3.1.15 SektörlerPerClusterShift Alanı

SectorsPerClusterShift alanı, küme başına sektörleri, küme başına sektör sayısı olan N için logaritma2(N) olarak ifade edilen şekilde tanımlar. Örneğin, küme başına 8 kesim için bu alanın değeri 3'tür.

Bu alan için geçerli değer aralığı:

  • Mümkün olan en küçük küme, küme başına en az 0 (1 sektör)dır.
  • En fazla 25 - BytesPerSectorShift, bu, 32 MB'lık bir küme boyutuna eşittir.

3.1.16 SayıFats Alanı

NumberOfFats alanı, birimin içerdiği FAT ve Ayırma Bit Eşlemi sayısını belirtmelidir.

Bu alan için geçerli değer aralığı:

  • Birimin yalnızca İlk FAT ve İlk Ayırma Bit Eşlemini içerdiğini gösteren 1
  • Birimin İlk FAT, İkinci FAT, İlk Ayırma Bit Eşlemi ve İkinci Ayırma Bit Eşlemi içerdiğini gösteren 2; Bu değer yalnızca TexFAT birimleri için geçerlidir

3.1.17 DriveSelect Field

DriveSelect alanı, kişisel bilgisayarlarda genişletilmiş INT 13h kullanarak bu birimden başlangıç sürecine yardımcı olan genişletilmiş INT 13h sürücü numarasını içermelidir.

Bu alan için tüm olası değerler geçerlidir. Önceki FAT tabanlı dosya sistemlerindeki benzer alanlar genellikle 80h değerini içeriyordu.

3.1.18 PercentInUse Alanı

PercentInUse alanı, Küme Yığınında ayrılan kümelerin yüzdesini açıklamalı.

Bu alan için geçerli değer aralığı:

  • 0 ile 100 arasında (küme yığınındaki ayrılmış kümelerin yüzdesidir) en yakın tamsayıya yuvarlanır
  • Tam olarak FFh, Küme Yığını'ndaki ayrılmış kümelerin yüzdesinin mevcut olmadığını gösterir.

Uygulamalar bu alanın değerini Küme Yığınındaki küme ayırma değişikliklerini yansıtacak şekilde değiştirecek veya FFh olarak değiştirecektir.

Uygulamalar, ilgili Ana Önyükleme veya Yedekleme Önyükleme bölgesi sağlama toplamı hesaplanırken bu alanı içermeyecektir. Yedek Önyükleme Kesimi'ne başvururken, uygulamalar bu alanı güncelliğini yitirmiş olarak kabul edecektir.

3.1.19 BootCode Alanı

BootCode alanı önyükleme talimatlarını içermelidir. Uygulamalar bu alanı bir bilgisayar sistemini önyüklemek için gereken CPU yönergeleriyle doldurabilir. Önyükleme talimatları sağlamayan uygulamalar, biçimlendirme işleminin bir parçası olarak bu alandaki her baytı F4h'ye (kişisel bilgisayarlarda yaygın CPU'lar için durdurma talimatı) olacak şekilde başlatmalıdır.

3.1.20 BootSignature Alanı

BootSignature alanı, belirli bir kesimin amacının Önyükleme Kesimi olarak belirlenip belirlenmediğini belirtmektedir.

Bu alan için geçerli değer AA55h'dir. Bu alandaki diğer tüm değerler, ilgili Önyükleme Sektörünü geçersiz kılar. Uygulamalar, ilgili Önyükleme Kesimindeki diğer alanlara bağlı olarak bu alanın içeriğini doğrulamalıdır.

3.2 Ana ve Yedek Genişletilmiş Önyükleme Kesimleri Alt Bölgeleri

Ana Genişletilmiş Önyükleme Kesimlerinin her kesimi aynı yapıya sahiptir; ancak, her kesim ayrı önyükleme kayışı oluşturma yönergeleri içerebilir (bkz. Tablo 6). Ana Önyükleme Sektöründeki önyükleme yönergeleri, alternatif BIOS uygulamaları veya gömülü bir sistemin üretici yazılımı gibi önyükleme ajanları bu sektörleri yükleyebilir ve içerdikleri yönergeleri yürütebilir.

Yedekleme Genişletilmiş Önyükleme Kesimleri, Ana Genişletilmiş Önyükleme Kesimlerinin bir yedeğidir ve aynı yapıya sahiptir (bkz . Tablo 6).

Main veya Backup Genişletilmiş Önyükleme Kesimlerinin yönergelerini yürütmeden önce, uygulamalar her kesimin ExtendedBootSignature alanında belirtilen değerin bulunduğundan emin olarak içeriklerini doğrulamalıdır.

İlk biçim işlemi, hem Ana hem de Yedek Genişletilmiş Önyükleme Bölümlerinin içeriğini başlatmasına rağmen, uygulamalar gerektiğinde bu bölümleri güncelleyebilir (ve ilgili Önyükleme Sağlama Toplamını da güncelleyebilir).

Tablo 6 Genişletilmiş Önyükleme Sektörü Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
Genişletilmiş Önyükleme Kodu 0 2BytesPerSectorShift – 4

Bu alan zorunludur ve Bölüm 3.2.1 içeriğini tanımlar.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de BytesPerSectorShift alanını içerir.

GenişletilmişBootİmzası 2BytesPerSectorShift – 4 4

Bu alan zorunludur ve Bölüm 3.2.2 içeriğini tanımlar.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de BytesPerSectorShift alanını içerir.

3.2.1 ExtendedBootCode Alanı

ExtendedBootCode alanı önyükleme talimatlarını içermelidir. Uygulamalar bu alanı bir bilgisayar sistemini önyüklemek için gereken CPU yönergeleriyle doldurabilir. Önyükleme yönergeleri sağlamayan uygulamalar, biçim işlemlerinin bir parçası olarak bu alandaki her baytı 00h olarak başlatacaktır.

3.2.2 ExtendedBootSignature Alanı

ExtendedBootSignature alanı, belirli bir kesimin amacının Genişletilmiş Önyükleme Kesimi olup olmadığını belirtir.

Bu alan için geçerli değer AA550000h'dir. Bu alandaki diğer tüm değerler ilgili Ana veya Yedek Genişletilmiş Önyükleme Sektörünü geçersiz kılar. Uygulamalar, ilgili Genişletilmiş Önyükleme Sektöründeki diğer alanlara bağlı olmadan önce bu alanın içeriğini doğrulamalıdır.

3.3 Ana ve Yedekleme OEM Parametreleri Alt Bölgeleri

Ana OEM Parametreleri alt bölgesi, üreticiye özgü bilgiler içerebilen on parametre yapısı içerir (bkz . Tablo 7). On parametre yapısının her biri Genel Parametreler şablonundan türetilir (bkz . Bölüm 3.3.2). Üreticiler, Genel Parametreler şablonundan kendi özel parametre yapılarını türetebilir. Bu belirtim iki parametre yapısını tanımlar: Null Parametreler (bkz . Bölüm 3.3.3) ve Flash Parametreleri (bkz . Bölüm 3.3.4).

Yedekleme OEM Parametreleri, Ana OEM Parametrelerinin bir yedeğidir ve aynı yapıya sahiptir (bkz . Tablo 7).

Ana veya Yedek OEM Parametrelerinin içeriğini kullanmadan önce, uygulamalar ilgili Önyükleme Sağlama Toplamı'nı doğrulayarak içeriklerinin doğruluğunu teyit etmelidir.

Üreticiler, Main ve Backup OEM Parametrelerini varsa kendi özel parametre yapılarıyla ve diğer parametre yapılarıyla doldurmalıdır. Sonraki biçim işlemleri Ana ve Yedekleme OEM Parametrelerinin içeriğini koruyacaktır.

Uygulamalar, Main ve Backup OEM Parametrelerini gerektiği şekilde güncelleştirebilir (ve ilgili Başlatma Sağlama Toplamını da güncelleştirecektir).

Tablo 7 OEM Parametreleri Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
Parametreler[0] 0 48 Bu alan zorunludur ve Bölüm 3.3.1 içeriğini tanımlar.

.

.

.

.

.

.

.

.

.

.

.

.

Parametreler[9] 432 48 Bu alan zorunludur ve Bölüm 3.3.1 içeriğini tanımlar.
Rezerve edildi 480 2BytesPerSectorShift – 480

Bu alan zorunludur ve içeriği saklıdır.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de BytesPerSectorShift alanını içerir.

3.3.1 Parametreler[0] ... Parametreler[9]

Bu dizideki her Parametre alanı, Genel Parametreler şablonundan türetilen bir parametre yapısı içerir (bkz . Bölüm 3.3.2). Kullanılmayan Parametreler alanının Null Parametreler yapısı içerdiği olarak tanımlanacaktır (bkz Bölüm 3.3.3).

3.3.2 Genel Parametreler Şablonu

Genel Parametreler şablonu, parametre yapısının temel tanımını sağlar (bkz . Tablo 8). Tüm parametre yapıları bu şablondan türetilir. Bu Genel Parametreler şablonu için destek zorunludur.

Tablo 8 Genel Parametreler Şablonu

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
ParametrelerKılavuzu 0 16 Bu alan zorunludur ve Bölüm 3.3.2.1 içeriğini tanımlar.
Özel Tanımlı 16 32 Bu alan zorunludur ve bu şablondan türetilen yapılar içeriğini tanımlar.
3.3.2.1 Parametreler Guid Alanı

ParametersGuid alanı, verilen parametre yapısının geri kalanının düzenini belirleyen bir GUID tanımlaması gerekir.

Bu alan için tüm olası değerler geçerlidir; ancak üreticilerin bu şablondan özel parametre yapıları türetirken GUID seçmek için GuidGen.exegibi bir GUID oluşturma aracı kullanması gerekir.

3.3.3 Null Parametreler

Null Parametreler yapısı Genel Parametreler şablonundan türetilir (bkz . Bölüm 3.3.2) ve kullanılmayan parametreler alanını açıklamalı (bkz . Tablo 9). OEM Parametreleri yapısını oluştururken veya güncelleştirirken, uygulamalar kullanılmayan Parametreler alanlarını Null Parametreler yapısıyla doldurur. Ayrıca, OEM Parametreleri yapısını oluştururken veya güncelleştirirken, uygulamalar dizinin sonunda Null Parametreler yapılarını birleştirmeli ve böylece diğer tüm Parametre yapılarını OEM Parametreleri yapısının başında bırakmalıdır.

Null Parametreler yapısı için destek zorunludur.

Tablo 9 Null Parametre Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
ParametrelerKılavuzu 0 16 Bu alan zorunludur ve Bölüm 3.3.3.1 içeriğini tanımlar.
Rezerve edildi 16 32 Bu alan zorunludur ve içeriği saklıdır.
3.3.3.1 ParametrelerGUID Alanı

ParametersGuid alanı, Genel Parametreler şablonu tarafından sağlanan tanıma uygun olmalıdır (bkz . Bölüm 3.3.2.1).

Guid gösteriminde bu alan için geçerli değer: {00000000-0000-0000-0000-000000000000}.

3.3.4 Flash Parametreleri

Flash Parametre yapısı Genel Parametreler şablonundan türetilir (bkz . Bölüm 3.3.2) ve flash medya için parametreler içerir (bkz . Tablo 10). Flash tabanlı depolama cihazlarının üreticileri bu parametre yapısıyla bir Parameters alanını (tercihen Parameters[0] alanı) doldurabilir. Uygulamalar, okuma/yazma işlemleri sırasında erişim işlemlerini iyileştirmek ve medya biçimlendirmesi sırasında dosya sistemi yapılarının hizalaması için Flash Parametreleri yapısındaki bilgileri kullanabilir.

Flash Parametreleri yapısı desteği isteğe bağlıdır.

Tablo 10 Flash Parametreleri Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
ParametrelerKılavuzu 0 16 Bu alan zorunludur ve Bölüm 3.3.4.1 içeriğini tanımlar.
EraseBlockSize 16 4 Bu alan zorunludur ve Bölüm 3.3.4.2 içeriğini tanımlar.
Sayfa Boyutu 20 4 Bu alan zorunludur ve Bölüm 3.3.4.3 içeriğini tanımlar.
SpareSectors yirmi dört 4 Bu alan zorunludur ve Bölüm 3.3.4.4 içeriğini tanımlar.
Rastgele Erişim Süresi 28 4 Bu alan zorunludur ve Bölüm 3.3.4.5 içeriğini tanımlar.
Programlama Zamanı 32 4 Bu alan zorunludur ve Bölüm 3.3.4.6 içeriğini tanımlar.
ReadCycle 36 4 Bu alan zorunludur ve Bölüm 3.3.4.7 içeriğini tanımlar.
WriteCycle 40 4 Bu alan zorunludur ve Bölüm 3.3.4.8 içeriğini tanımlar.
Rezerve edildi 44 4 Bu alan zorunludur ve içeriği saklıdır.

ParametersGuid alanı dışında tüm Flash Parametreleri alanları için tüm olası değerler geçerlidir. Ancak, 0 değeri alanın gerçekten anlamsız olduğunu gösterir (uygulamalar verilen alanı yoksayar).

3.3.4.1 Parametreler Guid Alanı

ParametersGuid alanı, Genel Parametreler şablonunda sağlanan tanıma uygun olmalıdır (bkz. Bölüm 3.3.2.1).

Guid gösteriminde bu alan için geçerli değer: {0A0C7E46-3399-4021-90C8-FA6D389C4BA2}.

3.3.4.2 EraseBlockSize Alanı

EraseBlockSize alanı, flash medyanın silme bloğunun boyutunu bayt cinsinden açıklamalı.

3.3.4.3 Sayfa Boyutu Alanı

PageSize alanı, flash medya sayfasının bayt cinsinden boyutunu açıklamalı.

3.3.4.4 Yedek Sektörler Alanı

SpareSectors alanı, flash medyanın yedekleme işlemleri için sunulan sektör sayısını açıklayacaktır.

3.3.4.5 Rastgele Erişim Süresi Alanı

RandomAccessTime alanı, flash medyanın ortalama rastgele erişim süresini nanosaniye olarak tanımlayacaktır.

3.3.4.6 ProgrammingTime Alanı

ProgrammingTime alanı, flash medyanın ortalama programlama süresini nanosaniye olarak tanımlayacaktır.

3.3.4.7 ReadCycle Alanı

ReadCycle alanı, flash medyanın ortalama okuma döngüsü süresini nanosaniye olarak tanımlayacaktır.

3.3.4.8 WriteCycle Alanı

WriteCycle alanı, nanosaniye olarak ortalama yazma döngüsü süresini açıklamalı.

3.4 Ana ve Yedek Önyükleme Kontrol Toplamı Alt Bölgeleri

Ana ve Yedekleme Önyükleme sağlama toplamlarının her biri, kendi Önyükleme bölgelerindeki diğer tüm alt bölgelerin içeriklerinin dört baytlık sağlama toplamlarının yinelenen bir desenini içerir. Sağlama toplamı hesaplaması, ilgili Önyükleme Kesiminde yer alan VolumeFlags ve PercentInUse alanlarını içermeyecektir (bkz. Şekil 1). Dört baytlık kontrol toplamının yinelenen modeli, ilgili Önyükleme Kontrol Toplamı alt bölgesini alt bölgenin başından sonuna kadar doldurur.

Ana veya Yedekleme Önyükleme bölgelerindeki diğer alt bölgelerden herhangi birinin içeriğini kullanmadan önce, uygulamalar ilgili Önyükleme Sağlama Toplamı'nı doğrulayarak içeriklerini doğrular.

İlk biçim işlemi hem Ana hem de Yedekleme Önyükleme Sağlama Toplamlarını yinelenen sağlama toplamı düzeniyle doldururken, ilgili Önyükleme bölgelerindeki diğer kesimlerin içeriği değiştikçe uygulamalar bu kesimleri güncelleştirecektir.

Şekil 1 Önyükleme Sağlama Toplamı Hesaplaması

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 Dosya Ayırma Tablosu Bölgesi

Dosya Ayırma Tablosu (FAT) bölgesi, biri İlk FAT alt bölgesinde ve diğeri İkinci FAT alt bölgesinde olmak üzere en çok iki FAT içerebilir. NumberOfFats alanı, bu bölgenin kaç FAT içerdiğini açıklar. NumberOfFats alanının geçerli değerleri 1 ve 2'dir. Bu nedenle, İlk FAT alt bölgesi her zaman bir FAT içerir. NumberOfFats alanı iki ise, İkinci FAT alt bölgesi de bir FAT içerir.

VolumeFlags alanının ActiveFat alanı hangi FAT'nin etkin olduğunu açıklar. Yalnızca Ana Önyükleme Bölümündeki VolumeFlags alanı geçerli. Uygulamalar, etkin olmayan FAT'yi eski olarak ele ayacaktır. Etkin olmayan FAT kullanımı ve FAT'ler arasında geçiş yapmak uygulamaya özeldir.

4.1 Birinci ve İkinci FAT Alt Bölgeleri

FAT, Küme Yığınındaki küme zincirlerini açıklamalı (bkz . Tablo 11). Küme zinciri, dosyaların, dizinlerin ve diğer dosya sistemi yapılarının içeriğini kaydetmek için alan sağlayan bir dizi kümedir. FAT, küme dizinlerinin tek bağlantılı listesi olarak küme zincirini temsil eder. İlk iki girdi dışında, FAT içindeki her giriş tam olarak bir kümeyi temsil eder.

Tablo 11 Dosya Ayırma Tablo Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(byte)

Açıklamalar
FatEntry[0] 0 4 Bu alan zorunludur ve Bölüm 4.1.1 içeriğini tanımlar.
FatEntry[1] 4 4 Bu alan zorunludur ve Bölüm 4.1.2 içeriğini tanımlar.
FatEntry[2] 8 4 Bu alan zorunludur ve Bölüm 4.1.3 içeriğini tanımlar.

.

.

.

.

.

.

.

.

.

.

.

.

FatEntry[ClusterCount+1] (ClusterCount + 1) * 4 4

Bu alan zorunludur ve Bölüm 4.1.3 içeriğini tanımlar.

ClusterCount + 1 hiçbir zaman FFFFFFF6h'yi aşamaz.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de ClusterCount alanını içerir.

ExcessSpace (ClusterCount + 2) * 4 (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4)

Bu alan zorunludur ve varsa içeriği tanımlanmamıştır.

Not: Hem Ana hem de Yedekleme Önyükleme Kesimleri ClusterCount, FatLength ve BytesPerSectorShift alanlarını içerir.

4.1.1 FatEntry[0] Alan

FatEntry[0] alanı, medya türünü ilk baytta (en düşük sipariş bayt) açıklamalı ve kalan üç baytta FFh içermelidir.

Medya türü (ilk bayt) F8h olmalıdır.

4.1.2 FatEntry[1] Alan

FatEntry[1] alanı yalnızca geçmiş öncelik nedeniyle var olur ve ilgilendiğiniz hiçbir şeyi tanımlamaz.

Bu alan için geçerli değer FFFFFFFFh'dir. Uygulamalar bu alanı önceden belirlenmiş değerine başlatacak ve bu alanı herhangi bir amaçla kullanmamalıdır. Uygulamalar bu alanı yorumlamamalı ve çevresindeki alanları değiştiren işlemler genelinde içeriğini korumalıdır.

4.1.3 FatEntry[2] ... FatEntry[ClusterCount+1] Alanlar

Bu dizideki her FatEntry alanı Küme Yığınındaki bir kümeyi temsil edecektir. FatEntry[2] Küme Yığınındaki ilk kümeyi temsil eder ve FatEntry[ClusterCount+1] Küme Yığınındaki son kümeyi temsil eder.

Bu alanlar için geçerli değer aralığı şunlardır:

  • 2 ile ClusterCount + 1 arasında, bu da dahil olmak üzere, verilen küme zincirindeki bir sonraki FatEntry'ye işaret eder; verilen FatEntry, belirtilen küme zincirinde kendisinden önce gelen herhangi bir FatEntry'ye işaret etmeyecektir
  • Verilen FatEntry'nin karşılık gelen kümesini "bozuk" olarak işaretleyen FFFFFFF7h tam olarak.
  • Verilen FatEntry'nin karşılık gelen kümesini küme zincirinin son kümesi olarak işaretleyen tam olarak FFFFFFFFh değeri; Bu değer, belirli bir küme zincirinin son FatEntry değeri için tek geçerli değerdir.

5 Veri Bölgesi

Veri bölgesi, dosya sistemi yapıları, dizinleri ve dosyalar için yönetilen alan sağlayan Küme Yığınını içerir.

5.1 Küme Belleği Alt Bölge

Küme Yığınının yapısı çok basittir (bkz . Tablo 12); art arda gelen her kesim serisi, SectorsPerClusterShift alanının tanımladığı gibi bir kümeyi tanımlar. Daha da önemlisi, Küme Yığını'nın ilk kümesinde doğrudan FatEntry[2] dizinine karşılık gelen iki dizini vardır.

Bir exFAT biriminde Ayırma Bit Eşlemi (bkz . Bölüm 7.1.5), tüm kümelerin ayırma durumunun kaydını tutar. exFAT'ın öncülleri (FAT12, FAT16 ve FAT32) ile arasındaki en önemli farklardan biri, bir FAT'nin Küme Yığını'ndaki tüm kümelerin ayrım durumlarını kaydetmesidir.

Tablo 12 Küme Yığın Yapısı

Alan Adı

Uzaklık

(sektör)

Boyut

(sektörler)

Açıklamalar
Küme[2] ClusterHeapOffset 2SektörBaşınaKümeKaydırma

Bu alan zorunludur ve Bölüm 5.1.1 içeriğini tanımlar.

Not: Ana ve Yedekleme Önyükleme Kesimleri hem ClusterHeapOffset hem de SectorsPerClusterShift alanlarını içerir.

.

.

.

.

.

.

.

.

.

.

.

.

Küme[KümeSayısı+1] ClusterHeapOffset + (ClusterCount – 1) * 2SectorsPerClusterShift 2SektörBaşınaKümeKaydırma

Bu alan zorunludur ve Bölüm 5.1.1 içeriğini tanımlar.

Not: Hem Ana hem de Yedekleme Önyükleme Kesimleri ClusterCount, ClusterHeapOffset ve SectorsPerClusterShift alanlarını içerir.

5.1.1 Küme[2] ... Küme[KümeSayısı+1] Alanlar

Bu dizideki her Küme alanı, boyutu SectorsPerClusterShift alanı tarafından tanımlanan bir dizi bitişik kesimdir.

6 Dizin Yapısı

exFAT dosya sistemi, Küme Yığını'nda (Cluster Heap) bulunan dosya sistemi yapılarını ve dosyaları yönetmek için bir dizin ağacı yaklaşımı kullanır. Dizinler, dizin ağacında ebeveyn ve çocuk öğe arasında bire çok ilişkiye sahiptir.

FirstClusterOfRootDirectory alanının başvurduğu dizin, dizin ağacının köküdür. Diğer tüm dizinler kök dizinden tek bir bağlantı yapısı şeklinde türetilir.

Her dizin bir dizi dizin girdisi içerir (bkz . Tablo 13).

Bir veya daha fazla dizin girdisi, dosya sistemi yapısı, alt dizin veya dosya gibi ilgi çekici bir şeyi açıklayan bir dizin girdi kümesinde birleştirilir.

Tablo 13 Dizin Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(bayt)

Açıklamalar
DizinGirişi[0] 0 32 Bu alan zorunludur ve Bölüm 6.1 içeriğini tanımlar.

.

.

.

.

.

.

.

.

.

.

.

.

DizinGiriş[N–1] (N – 1) * 32 32

Bu alan zorunludur ve Bölüm 6.1 içeriğini tanımlar.

N, DirectoryEntry alanlarının sayısı, verilen dizini içeren küme zincirinin bayt cinsinden boyutudur ve bir DirectoryEntry alanının boyutuna (32 bayt) bölünür.

6.1 DirectoryEntry[0] ... DirectoryEntry[N--1]

Bu dizideki her DirectoryEntry alanı Genel DirectoryEntry şablonundan türetilir (bkz . Bölüm 6.2).

6.2 Genel DirectoryEntry Şablonu

Genel DirectoryEntry şablonu, dizin girdileri için temel tanımı sağlar (bkz . Tablo 14). Bu şablondan türetilen tüm dizin giriş yapıları ve yalnızca Microsoft tarafından tanımlanan dizin giriş yapıları geçerlidir (exFAT, Bölüm 7.8 ve Bölüm 7.9'da tanımlananlar dışında üretici tanımlı dizin giriş yapıları için hükümlere sahip değildir). Genel DirectoryEntry şablonunu yorumlama özelliği zorunludur.

Tablo 14 Genel DirectoryEntry Şablonu

Alan Adı

Uzaklık

(bayt)

Boyut

(bayt)

Açıklamalar
Giriş Türü 0 1 Bu alan zorunludur ve Bölüm 6.2.1 içeriğini tanımlar.
Özel Tanımlı 1 19 Bu alan zorunludur ve bu şablondan türetilen yapılar içeriğini tanımlayabilir.
İlkKüme 20 4 Bu alan zorunludur ve Bölüm 6.2.2 içeriğini tanımlar.
Veri Uzunluğu yirmi dört 8 Bu alan zorunludur ve Bölüm 6.2.3 içeriğini tanımlar.

6.2.1 EntryType Alanı

EntryType alanında, alanın değerinin tanımladığı üç kullanım modu vardır (aşağıdaki listeye bakın).

  • 00h, dizin sonu işaretçisi ve aşağıdaki koşullar geçerlidir:
    • Verilen DirectoryEntry'deki diğer tüm alanlar aslında ayrılmıştır
    • Verilen dizindeki sonraki tüm dizin girdileri de dizin sonu işaretleyicileridir
    • Dizin sonu işaretçileri yalnızca dizin giriş kümeleri dışında geçerlidir.
    • Uygulamalar ihtiyaç duyulduğunda dizin sonu işaretleyicilerinin üzerine yazabilir.
  • 01h ve 7Fh (her ikisi dahil) arasında, kullanılmayan dizin girişi işaretleyicisi olup aşağıdaki koşullar geçerlidir:
    • Verilen DirectoryEntry'deki diğer tüm alanlar aslında tanımlanmamış
    • Kullanılmayan dizin girdileri yalnızca dizin girdi kümelerinin dışında geçerlidir
    • Uygulamalar, kullanılmayan dizin girdilerinin üzerine gerektiği şekilde yazabilir
    • Bu değer aralığı, 0 değerini içeren InUse alanına karşılık gelir (bkz. Bölüm 6.2.1.4)
  • Normal bir dizin girişi olan ve aşağıdaki koşullar geçerli olan 81h ile FFh (dahil) arasında:
    • EntryType alanının içeriği (bkz . Tablo 15), DirectoryEntry yapısının geri kalanının düzenini belirler
    • Bu değer aralığı ve yalnızca bu değer aralığı bir dizin giriş kümesi içinde geçerlidir
    • Bu değer aralığı doğrudan 1 değerini içeren InUse alanına karşılık gelir (bkz . Bölüm 6.2.1.4)

InUse alanında değişiklik yapılmasının (bkz. Bölüm 6.2.1.4) yanlışlıkla dizin sonu işaretçisi oluşumuna neden olmasını önlemek için, 80h değeri geçersizdir.

Tablo 15 Genel EntryType Alan Yapısı

Alan Adı

Uzaklık

(bit)

Boyut

(bit)

Açıklamalar
TypeCode 0 5 Bu alan zorunludur ve Bölüm 6.2.1.1 içeriğini tanımlar.
TürÖnemlilik 5 1 Bu alan zorunludur ve Bölüm 6.2.1.2 içeriğini tanımlar.
TürKategori 6 1 Bu alan zorunludur ve Bölüm 6.2.1.3 içeriğini tanımlar.
Kullanımda 7 1 Bu alan zorunludur ve Bölüm 6.2.1.4 içeriğini tanımlar.
6.2.1.1 TypeCode Alanı

TypeCode alanı, verilen dizin girdisinin belirli türünü kısmen açıklar. Bu alanın yanı sıra TypeImportance ve TypeCategory alanları (sırasıyla Bölüm 6.2.1.2 ve Bölüm 6.2.1.3'e bakın) verilen dizin girdisinin türünü benzersiz olarak tanımlar.

TypeImportance ve TypeCategory alanlarının her ikisi de 0 değerini içermediği sürece, bu alanın tüm olası değerleri geçerlidir; bu durumda, 0 değeri bu alan için geçersizdir.

6.2.1.2 TypeImportance Alanı

TypeImportance alanı, verilen dizin girişinin önemini açıklayacaktır.

Bu alan için geçerli değerler:

6.2.1.3 TürKategori Alanı

TypeCategory alanı, verilen dizin girişinin kategorisini açıklayacaktır.

Bu alan için geçerli değerler:

  • 0, verilen dizin girdisinin birincil olduğu anlamına gelir (bkz . Bölüm 6.3)
  • 1, verilen dizin girişinin ikincil olduğu anlamına gelir (bkz . Bölüm 6.4)
6.2.1.4 InUse Alanı

InUse alanı, belirtilen dizin girişinin kullanımda olup olmadığını açıklar.

Bu alan için geçerli değerler:

  • 0, verilen dizin girdisinin kullanımda olmadığı anlamına gelir; Bu, verilen yapının aslında kullanılmayan bir dizin girdisi olduğu anlamına gelir
  • 1, verilen dizin girişinin kullanımda olduğu anlamına gelir; Bu, verilen yapının normal bir dizin girdisi olduğu anlamına gelir

6.2.2 Birinci Küme Alanı

FirstCluster alanı, verilen dizin girişiyle ilişkili Küme Yığınındaki ilk ayırma kümesinin dizinini içermelidir.

Bu alan için geçerli değer aralığı:

  • Tam olarak 0, yani küme ayırma yok
  • Geçerli küme dizinlerinin aralığı olan 2 ile ClusterCount + 1 arasında

Küme ayırma türev yapısıyla uyumlu değilse, bu şablondan türetilen yapılar hem FirstCluster hem de DataLength alanlarını yeniden tanımlanabilir.

6.2.3 DataLength Alanı

DataLength alanı, ilişkili küme ayırmasının içerdiği verilerin boyutunu bayt cinsinden açıklar.

Bu alan için geçerli değer aralığı:

  • En az 0; FirstCluster alanı 0 değerini içeriyorsa, bu alanın tek geçerli değeri 0'dır
  • En çok ClusterCount * 2SektörlerPerClusterShift* 2BaytlarPerSektörShift

Bu şablondan türetilen yapılar, türev yapı için bir küme ayırma mümkün değilse hem FirstCluster hem de DataLength alanlarını yeniden tanımlanabilir.

6.3 Genel Birincil DizinGiriş Şablonu

Dizin girdi kümesindeki ilk dizin girdisi birincil dizin girdisi olmalıdır. Varsa, dizin girdi kümesindeki sonraki tüm dizin girişleri ikincil dizin girdileri olacaktır (bkz . Bölüm 6.4).

Genel Birincil DirectoryEntry şablonunu yorumlama özelliği zorunludur.

Tüm birincil dizin giriş yapısı, Genel DirectoryEntry şablonundan türetilen Genel Birincil DirectoryEntry şablonundan türetilir (bkz. Tablo 16), (bkz. Bölüm 6.2).

Tablo 16 Genel Birincil Dizin Varlığı Şablonu

Alan Adı

Uzaklık

(bayt)

Boyut

(bayt)

Açıklamalar
Giriş Türü 0 1 Bu alan zorunludur ve Bölüm 6.3.1 içeriğini tanımlar.
İkincil Sayım 1 1 Bu alan zorunludur ve Bölüm 6.3.2 içeriğini tanımlar.
SetChecksum 2 2 Bu alan zorunludur ve Bölüm 6.3.3 içeriğini tanımlar.
Genel Birincil Bayraklar 4 2 Bu alan zorunludur ve Bölüm 6.3.4 içeriğini tanımlar.
Özel Tanımlı 6 14 Bu alan zorunludur ve bu şablondan türetilen yapılar içeriğini tanımlar.
İlkKüme 20 4 Bu alan zorunludur ve Bölüm 6.3.5 içeriğini tanımlar.
Veri Uzunluğu yirmi dört 8 Bu alan zorunludur ve Bölüm 6.3.6 içeriğini tanımlar.

6.3.1 EntryType Alanı

EntryType alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1).

6.3.1.1 TypeCode Alanı

TypeCode alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1.1).

6.3.1.2 TürÖnemi Alanı

TypeImportance alanı, Generic DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1.2).

6.3.1.2.1 Kritik Birincil Dizin Girdileri

Kritik birincil dizin girdileri, exFAT biriminin düzgün yönetimi için kritik olan bilgileri içerir. Yalnızca kök dizin kritik birincil dizin girdileri içerir (Dosya dizini girdileri özel durum oluşturur, bkz . Bölüm 7.4).

Kritik birincil dizin girdilerinin tanımı ana exFAT düzeltme numarasıyla ilişkilidir. Uygulamalar tüm kritik birincil dizin girdilerini destekleyecek ve yalnızca bu belirtimin tanımladığı kritik birincil dizin giriş yapılarını kaydedecektir.

6.3.1.2.2 Benign Birincil Dizin Girdileri

Zararsız birincil dizin girdileri, exFAT birimini yönetmek için yararlı olabilecek ek bilgiler içerir. Herhangi bir dizin zararsız birincil dizin girdileri içerebilir.

Zararsız birincil dizin girdilerinin tanımı, küçük exFAT düzeltme numarasıyla ilişkilidir. Bu spesifikasyon veya herhangi bir sonraki spesifikasyonun tanımladığı zararsız birincil dizin girdilerine destek verilmesi isteğe bağlıdır. Tanınmayan zararsız bir birincil dizin girdisi, dizin girdi kümesinin tamamını tanınmamış olarak işler (ilgili dizin girdisi şablonlarının tanımının ötesinde).

6.3.1.3 TypeCategory Alanı

TypeCategory alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz. Bölüm 6.2.1.3).

Bu şablon için bu alanın geçerli değeri 0 olmalıdır.

6.3.1.4 InUse Alanı

InUse alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1.4).

6.3.2 İkincil Sayı Alanı

SecondaryCount alanı, verilen birincil dizin girdisini hemen izleyen ikincil dizin girdilerinin sayısını açıklayacaktır. Bu ikincil dizin girdileri ve verilen birincil dizin girdileri, dizin giriş kümesini oluşturur.

Bu alan için geçerli değer aralığı:

  • En az 0, bu birincil dizin girdisinin dizin giriş kümesindeki tek giriş olduğu anlamına gelir
  • En fazla 255, yani bu birincil dizin girdisi ve sonraki 255 dizin girdisi, dizin girdisi kümesini oluşturur.

Bu şablondan türetilen kritik birincil dizin giriş yapıları hem SecondaryCount hem de SetChecksum alanlarını yeniden tanımlanabilir.

6.3.3 SetChecksum Alanı

SetChecksum alanı, belirtilen dizin girdi kümesindeki tüm dizin girdilerinin sağlama toplamını içermelidir. Ancak sağlama toplamı bu alanı dışlar (bkz. Şekil 2). Uygulamalar, belirtilen dizin girdi kümesindeki başka bir dizin girdisi kullanmadan önce bu alanın içeriğinin geçerli olduğunu doğrulayacaktır.

Bu şablondan türetilen kritik birincil dizin giriş yapıları hem SecondaryCount hem de SetChecksum alanlarını yeniden tanımlanabilir.

Şekil 2 EntrySetChecksum Hesaplaması

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 GenelBirincilBayraklar Alanı

GeneralPrimaryFlags alanı bayraklar içerir (bkz . Tablo 17).

Bu şablondan türetilen kritik birincil dizin giriş yapıları bu alanı yeniden tanımlanabilir.

Tablo 17 Genel PrimaryFlags Alan Yapısı

Alan Adı

Uzaklık

(bit)

Boyut

(bit)

Açıklamalar
Tahsis Mümkün 0 1 Bu alan zorunludur ve Bölüm 6.3.4.1 içeriğini tanımlar.
NoFatChain 1 1 Bu alan zorunludur ve Bölüm 6.3.4.2 içeriğini tanımlar.
Özel Tanımlı 2 14 Bu alan zorunludur ve bu şablondan türetilen yapılar bu alanı tanımlayabilir.
6.3.4.1 Ayırma Mümkün Alanı

AllocationPossible alanı, küme yığınındaki bir ayırmanın verilen dizin girdisi için mümkün olup olmadığını açıklar.

Bu alan için geçerli değerler:

  • 0, kümelerle ilişkili ayırmanın mümkün olmadığı ve FirstCluster ve DataLength alanlarının tanımsız olduğu anlamına gelir (bu şablondan türetilen yapılar bu alanları yeniden tanımlanabilir)
  • 1, kümelerle ilişkili ayırmanın mümkün olduğu ve FirstCluster ve DataLength alanlarının tanımlandığı gibi olduğu anlamına gelir
6.3.4.2 NoFatChain Alanı

NoFatChain alanı, etkin FAT'nin verilen ayırmanın küme zincirini tanımlayıp tanımlamadığını gösterir.

Bu alan için geçerli değerler:

  • 0, ayırmanın küme zincirine karşılık gelen FAT girdilerinin geçerli olduğu ve uygulamaların bunları yorumladığı anlamına gelir; AllocationPossible alanı 0 değerini içeriyorsa veya AllocationPossible alanı 1 değerini ve FirstCluster alanı 0 değerini içeriyorsa, bu alanın tek geçerli değeri 0'dır
  • 1, ilişkili ayırmanın bitişik bir küme serisi olduğu anlamına gelir; kümeler için karşılık gelen FAT girişleri geçersizdir ve uygulamalar bunları yorumlamaz; uygulamaları ilişkili ayırmanın boyutunu hesaplamak için aşağıdaki denklemi kullanabilir: DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) en yakın tamsayıya yuvarlanır

Bu şablondan türetilen kritik birincil dizin giriş yapıları GeneralPrimaryFlags alanını yeniden tanımlarsa, ilişkili ayırmanın küme zinciri için karşılık gelen FAT girişleri geçerlidir.

6.3.5 İlkCluster Alanı

FirstCluster alanı, Generic DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.2).

NoFatChain biti 1 ise, FirstCluster küme yığınında geçerli bir kümeyi işaret etmelidir.

Bu şablondan türetilen kritik birincil dizin giriş yapıları FirstCluster ve DataLength alanlarını yeniden tanımlanabilir. Bu şablondan türetilen diğer yapılar, FirstCluster ve DataLength alanlarını yalnızca AllocationPossible alanı 0 değerini içeriyorsa yeniden tanımlanabilir.

6.3.6 DataLength Alanı

DataLength alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.3).

NoFatChain biti 1 ise DataLength sıfır olmamalıdır. FirstCluster alanı sıfırsa DataLength de sıfır olmalıdır.

Bu şablondan türetilen kritik birincil dizin giriş yapıları FirstCluster ve DataLength alanlarını yeniden tanımlanabilir. Bu şablondan türetilen diğer yapılar, FirstCluster ve DataLength alanlarını yalnızca AllocationPossible alanı 0 değerini içeriyorsa yeniden tanımlanabilir.

6.4 Genel İkincil DizinGirdisi Şablonu

İkincil dizin girdilerinin merkezi amacı, dizin giriş kümesi hakkında ek bilgi sağlamaktır. Genel İkincil DirectoryEntry şablonunu yorumlama özelliği zorunludur.

Hem kritik hem de zararsız ikincil dizin girdilerinin tanımı, küçük exFAT düzeltme numarasıyla ilişkilidir. Bu belirtimi veya sonraki belirtimleri tanımlayan kritik veya zararsız ikincil dizin girdileri için destek isteğe bağlıdır.

Tüm ikincil dizin giriş yapıları, Genel DizinGirişi şablonundan türetilen Genel İkincil DizinGirişi şablonundan türetilmiştir (bkz. Tablo 18) ve Genel DizinGirişi şablonuna dayanır (bkz. Bölüm 6.2).

Tablo 18 Genel İkincil Dizin Girdisi Şablonu

Alan Adı

Uzaklık

(bayt)

Boyut

(bayt)

Açıklamalar
Giriş Türü 0 1 Bu alan zorunludur ve Bölüm 6.4.1 içeriğini tanımlar.
GenelİkincilBayraklar 1 1 Bu alan zorunludur ve Bölüm 6.4.2 içeriğini tanımlar.
Özel Tanımlı 2 18 Bu alan zorunludur ve bu şablondan türetilen yapılar içeriğini tanımlar.
İlkKüme 20 4 Bu alan zorunludur ve Bölüm 6.4.3 içeriğini tanımlar.
Veri Uzunluğu yirmi dört 8 Bu alan zorunludur ve Bölüm 6.4.4 içeriğini tanımlar.

6.4.1 EntryType Alan Bölümü

EntryType alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1)

6.4.1.1 TypeCode Alanı

TypeCode alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1.1).

6.4.1.2 TypeImportance Alanı

TypeImportance alanı, Generic DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1.2).

6.4.1.2.1 Kritik İkincil Dizin Girdileri

Kritik ikincil dizin girdileri, içerdiği dizin giriş kümesinin düzgün yönetimi için kritik öneme sahip bilgiler içerir. Belirli bir kritik ikincil dizin girişi için destek isteğe bağlı olsa da, tanınmayan bir kritik dizin girdisi tüm dizin girdisini tanınmayan olarak işler (ilgili dizin girdisi şablonlarının tanımının dışında).

Ancak, bir dizin girdi kümesi, bir uygulamanın tanımadığı en az bir kritik ikincil dizin girdisi içeriyorsa, uygulama en çok dizin girdi kümesindeki dizin girdilerinin şablonlarını yorumlar ve dizin giriş kümesindeki herhangi bir dizin girdisiyle ilişkili veri ayırmasını yorumlamaz (Dosya dizin girdileri bir özel durum, bkz . Bölüm 7.4).

6.4.1.2.2 Zararsız İkincil Dizin Girdileri

Zararsız ikincil dizin girdileri, içerdiği dizin giriş kümesini yönetmek için yararlı olabilecek ek bilgiler içerir. Belirli bir zararsız ikincil dizin girişi için destek isteğe bağlıdır. Tanınmayan zararsız ikincil dizin girdileri, dizin girdi kümesinin tamamını tanınmamış olarak işlemez.

Uygulamalar tanımadığı ve zararsız olan herhangi bir ikincil girdiyi yoksayabilir.

6.4.1.3 TypeCategory Alanı

TypeCategory alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz. Bölüm 6.2.1.3).

Bu şablon için bu alanın geçerli değeri 1'dir.

6.4.1.4 InUse Alanı

InUse alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.1.4).

6.4.2 GenelSacondaryFlags Alanı

GeneralSecondaryFlags alanı bayraklar içerir (bkz . Tablo 19).

Tablo 19 Genel İkincil Bayraklar Alan Yapısı

Alan Adı

Uzaklık

(bit)

Boyut

(bit)

Açıklamalar
Tahsis Mümkün 0 1 Bu alan zorunludur ve Bölüm 6.4.2.1 içeriğini tanımlar.
NoFatChain 1 1 Bu alan zorunludur ve Bölüm 6.4.2.2 içeriğini tanımlar.
Özel Tanımlı 2 6 Bu alan zorunludur ve bu şablondan türetilen yapılar bu alanı tanımlayabilir.
6.4.2.1 Mümkün Ayırma Alanı

AllocationPossible alanı, Genel Birincil DizinGiriş şablonundaki aynı adlı alanla aynı tanıma sahip olmalıdır (bkz . Bölüm 6.3.4.1).

6.4.2.2 NoFatChain Alanı

NoFatChain alanı, Genel Birincil DizinEntry şablonundaki aynı adlı alanla aynı tanıma sahip olmalıdır (bkz . Bölüm 6.3.4.2).

6.4.3 Birinci Küme Alanı

FirstCluster alanı, Generic DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.2).

NoFatChain biti 1 ise, FirstCluster küme yığınında geçerli bir kümeyi işaret etmelidir.

6.4.4 DataLength Alanı

DataLength alanı, Genel DirectoryEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.2.3).

NoFatChain biti 1 ise DataLength sıfır olmamalıdır. FirstCluster alanı sıfırsa DataLength de sıfır olmalıdır.

7 Dizin Girişi Tanımları

ExFAT dosya sisteminin 1.00 düzeltmesi aşağıdaki dizin girdilerini tanımlar:

7.1 Tahsis Bit Eşlem Dizini Girişi

exFAT dosya sisteminde FAT, kümelerin ayırma durumunu açıklamaz; bunun yerine Ayırma Bit Eşlemi yapar. Ayırma Bit Eşlemleri Küme Yığınında bulunur (bkz . Bölüm 7.1.5) ve kök dizinde ilgili kritik birincil dizin girdileri vardır (bkz . Tablo 20).

NumberOfFats alanı, kök dizindeki geçerli Ayırma Bit Eşlem dizini girdilerinin sayısını belirler. NumberOfFats alanı 1 değerini içeriyorsa, tek geçerli Ayırma Bit Eşlem dizini girdisi sayısı 1'dir. Ayrıca, bir Ayırma Bit Eşlemi dizin girdisi yalnızca İlk Ayırma Bit Eşlemi'ni açıklıyorsa geçerlidir (bkz . Bölüm 7.1.2.1). NumberOfFats alanı 2 değerini içeriyorsa, tek geçerli Ayırma Bit Eşlem dizini girdisi sayısı 2'dir. Ayrıca, iki Ayırma Bit Eşlemi dizin girdisi yalnızca biri İlk Ayırma Bit Eşlemini, diğeri İkinci Ayırma Bit Eşlemini açıklarsa geçerlidir.

Tablo 20 Tahsis Bit Eşlem Dizin Girdisi Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(bayt)

Açıklamalar
Giriş Türü 0 1 Bu alan zorunludur ve Bölüm 7.1.1 içeriğini tanımlar.
Bitmap Bayrakları 1 1 Bu alan zorunludur ve Bölüm 7.1.2 içeriğini tanımlar.
Rezerve edildi 2 18 Bu alan zorunludur ve içeriği saklıdır.
İlkKüme 20 4 Bu alan zorunludur ve Bölüm 7.1.3 içeriğini tanımlar.
Veri Uzunluğu yirmi dört 8 Bu alan zorunludur ve Bölüm 7.1.4 içeriğini tanımlar.

7.1.1 EntryType Alanı

EntryType alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1).

7.1.1.1 TypeCode Alanı

TypeCode alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.1).

Ayırma Bit Eşlemi dizin girdisi için bu alanın geçerli değeri 1'dir.

7.1.1.2 TypeImportance Alanı

TypeImportance alanı, Genel Birincil DizinGrup şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.2).

Ayırma Bit Eşlemi dizin girdisi için bu alan için geçerli değer 0'dır.

7.1.1.3 TypeCategory Alanı

TypeCategory alanı, Genel Birincil DizinGrup şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.3).

7.1.1.4 InUse Alanı

InUse alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.4).

7.1.2 BitmapFlags Alanı

BitmapFlags alanı bayraklar içerir (bkz . Tablo 21).

Tablo 21 BitmapFlags Alan Yapısı

Alan Adı

Uzaklık

(bit)

Boyut

(bit)

Açıklamalar
BitmapIdentifier 0 1 Bu alan zorunludur ve Bölüm 7.1.2.1 içeriğini tanımlar.
Rezerve edildi 1 7 Bu alan zorunludur ve içeriği saklıdır.
7.1.2.1 BitmapIdentifier Alanı

BitmapIdentifier alanı, verilen dizin girişinin tanımladığı Ayırma Bit Eşlemi'ni gösterir. Uygulamalar İlk Ayırma Bit Eşlemini İlk FAT ile birlikte kullanacak ve İkinci Ayırma Bit Eşlemini İkinci FAT ile birlikte kullanacaktır. ActiveFat alanında hangi FAT ve Ayırma Bit Eşlemi'nin etkin olduğu açıklanır.

Bu alan için geçerli değerler:

  • 0, verilen dizin girdisinin İlk Ayırma Bit Eşlemi'ni tanımladığı anlamına gelir
  • 1, verilen dizin girdisinin İkinci Ayırma Bit Eşlemi'ni tanımladığı ve yalnızca NumberOfFats değeri 2 olduğunda mümkün olduğu anlamına gelir

7.1.3 FirstCluster Alanı

FirstCluster alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.5).

Bu alan, FAT'nin belirttiği gibi Ayırma Bit Eşlemi'ni barındıran küme zincirinin ilk kümesinin dizinini içerir.

7.1.4 DataLength Alanı

DataCluster alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.6).

7.1.5 Tahsis Bit Eşlemi

Ayırma Bit Eşlemi, Küme Yığınındaki kümelerin ayırma durumunu kaydeder. Ayırma Bit Eşlemindeki her bit, karşılık gelen kümesinin ayırma için kullanılabilir olup olmadığını gösterir.

Ayırma Bit Eşlemi, en düşükten en yüksek dizine kadar olan kümeleri temsil eder (bkz . Tablo 22). Geçmiş nedenlerden dolayı, ilk kümenin dizini 2'ye sahiptir.

Uyarı

Bit eşlem içindeki ilk bit, ilk baytın en düşük sıralı bitidir.

Tablo 22 Ayırma Bit Haritası Yapısı

Alan Adı

Uzaklık

(bit)

Boyut

(bit)

Açıklamalar
BitmapEntry[2] 0 1 Bu alan zorunludur ve Bölüm 7.1.5.1 içeriğini tanımlar.

.

.

.

.

.

.

.

.

.

.

.

.

BitmapEntry[ClusterCount+1] ClusterCount - 1 1

Bu alan zorunludur ve Bölüm 7.1.5.1 içeriğini tanımlar.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de ClusterCount alanını içerir.

Rezerve edildi Küme Sayısı (DataLength * 8) – KümeSayısı

Bu alan zorunludur ve içeriği varsa koruma altına alınmıştır.

Not: Ana ve Yedekleme Önyükleme Kesimlerinin her ikisi de ClusterCount alanını içerir.

7.1.5.1 BitmapEntry[2] ... BitmapEntry[ClusterCount+1] Alanlar

Bu dizideki her BitmapEntry alanı Küme Yığını'ndaki bir kümeyi temsil eder. BitmapEntry[2] Küme Yığınındaki ilk kümeyi temsil eder ve BitmapEntry[ClusterCount+1] Küme Yığınındaki son kümeyi temsil eder.

Bu alanlar için geçerli değerler şunlardır:

  • 0, ilgili kümeyi tahsis için uygun olarak açıklar
  • 1, karşılık gelen kümeyi ayırma için kullanılabilir değil olarak açıklar (bir küme ayırması ilgili kümeyi zaten tüketebilir veya etkin FAT ilgili kümeyi kötü olarak tanımlayabilir)

7.2 Büyük Harf Tablosu Dizin Girdisi

Küçükten büyüğe harf dönüşüm tablosu, küçük harfleri büyük harflere dönüştürmeyi belirler. Unicode karakterleri kullanan Dosya Adı dizin girdisi (bkz. Bölüm 7.7) ve exFAT dosya sisteminin büyük/küçük harfe duyarsız olması ve büyük/küçük harf koruması olması nedeniyle bu önemlidir. Büyük/Küçük Harf Tablosu Küme Yığını'nda bulunur (bkz . Bölüm 7.2.5) ve kök dizinde buna karşılık gelen bir kritik birincil dizin girdisi vardır (bkz . Tablo 23). Büyük Harf Tablosu dizin girdilerinin geçerli sayısı 1'dir.

Büyük/Küçük Harf Tablosu ile dosya adları arasındaki ilişki nedeniyle, biçimlendirme işlemlerinin bir sonucu dışında, uygulamalar Büyük/Küçük Harf Tablosunu değiştirmemelidir.

Tablo 23 Büyük Harf Tablosu Dizin Girişi Yapısı

Alan Adı

Uzaklık

(bayt)

Boyut

(bayt)

Açıklamalar
Giriş Türü 0 1 Bu alan zorunludur ve Bölüm 7.2.1 içeriğini tanımlar.
Ayrılmış1 1 3 Bu alan zorunludur ve içeriği saklıdır.
TableChecksum 4 4 Bu alan zorunludur ve Bölüm 7.2.2 içeriğini tanımlar.
Rezerve2 8 12 Bu alan zorunludur ve içeriği saklıdır.
İlkKüme 20 4 Bu alan zorunludur ve Bölüm 7.2.3 içeriğini tanımlar.
Veri Uzunluğu yirmi dört 8 Bu alan zorunludur ve Bölüm 7.2.4 içeriğini tanımlar.

7.2.1 EntryType Alanı

EntryType alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1).

7.2.1.1 TypeCode Alanı

TypeCode alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.1).

Büyük Harf Tablosu dizin girdisi için bu alanın geçerli değeri 2'dir.

7.2.1.2 TypeImportance Alanı

TypeImportance alanı, Genel Birincil DizinGrup şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.2).

Büyük/Küçük Harf Tablosu dizin girdisi için bu alanın geçerli değeri 0'dır.

7.2.1.3 TypeCategory Alanı

TypeCategory alanı, Genel Birincil DizinGrup şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.3).

7.2.1.4 InUse Alanı

InUse alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.1.4).

7.2.2 TableChecksum Alanı

TableChecksum alanı, Büyük Harf Tablosunun checksum'unu içerir (FirstCluster ve DataLength alanlarının tanımladığı). Uygulamalar, Büyük Harf Tablosu'nu kullanmadan önce bu alanın içeriğinin geçerli olduğunu doğrulamalıdır.

Şekil 3 TableChecksum Hesaplaması

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 İlkKüme Alanı

FirstCluster alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.5).

Bu alan, FAT'nin açıkladığı gibi, Yukarı Servis Talebi Tablosunu barındıran küme zincirinin ilk kümesinin dizinini içerir.

7.2.4 DataLength Alanı

DataCluster alanı, Genel Birincil DizinEntry şablonunda sağlanan tanıma uygun olmalıdır (bkz . Bölüm 6.3.6).

7.2.5 Büyük/Küçük Harf Tablosu

Büyük/küçük harf tablosu, unicode karakter eşlemeleri dizisidir. Karakter eşlemesi, büyük harf tablosundaki alanın dizininin büyük harfe dönüştürülecek Unicode karakterini temsil ettiği 2 baytlık bir alandan ve büyük harf Unicode karakterini temsil eden 2 baytlık alandan oluşur.

İlk 128 Unicode karakteri zorunlu eşlemelere sahiptir (bkz . Tablo 24). İlk 128 Unicode karakterinden herhangi biri için başka bir karakter eşlemesi olan bir büyük harf tablosu geçersizdir.

Yalnızca zorunlu eşleme aralığındaki karakterleri destekleyen uygulamalar, büyük harf tablosunun geri kalanının eşlemelerini yoksayabilir. Bu tür uygulamalar yalnızca dosyaları oluştururken veya yeniden adlandırırken zorunlu eşleme aralığındaki karakterleri kullanır (Dosya Adı dizin girdisi aracılığıyla bkz. Bölüm 7.7). Mevcut dosya adlarını büyük harf yaparken, bu tür uygulamalar zorunlu olmayan eşleme aralığındaki karakterleri büyük harf yapmaz, ancak sonuçta elde edilen büyük harfli dosya adında dokunmayacaktır (bu, kısmi bir büyük harf dönüşümüdür). Dosya adlarını karşılaştırırken, bu tür uygulamalar yalnızca zorunlu olmayan eşleme aralığındaki Unicode karakterleriyle karşılaştırma altında adından farklı olan dosya adlarını eşdeğer olarak ele ayacaktır. Bu tür dosya adları yalnızca potansiyel olarak eşdeğer olsa da, bu tür uygulamalar tamamen büyük harfle yazılmış dosya adının karşılaştırma altındaki adla çakışmadığından emin olamaz.

Tablo 24 Zorunlu ilk 128 büyük harfle yazım tablo girdileri

Tablo dizini + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7
0000h 00:00 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

(Not: Kimlik dışı büyük/küçük harf eşlemelerine sahip girişler kalın yazı tipindedir)

Bir birimi biçimlendirtikte, Unicode karakter alanının büyük bir bölümünün büyük/küçük harf kavramı olmadığından (yani "küçük harf" ve "büyük harf" karakterleri eşdeğerdir) uygulamalar kimlik eşleme sıkıştırması kullanarak sıkıştırılmış biçimde bir büyük/küçük harf tablosu oluşturabilir. Uygulamalar, FFFFh değerini ve ardından kimlik eşlemelerinin sayısını içeren bir dizi kimlik eşlemesini temsil ederek bir büyük/küçük harf tablosunu sıkıştırır.

Örneğin, bir uygulama sıkıştırılmış bir up-case tablosunun aşağıdaki sekiz girişiyle ilk 100 (64h) karakter eşlemelerini temsil edebilir:

FFFFh, 0061h, 0041h, 0042h, 0043h

İlk iki girdi, 0000h'den 0060h'ye kadar olan ilk 97 (61h) karakterin kimlik eşlemelerine sahip olduğunu gösterir. Sonraki karakterler, 0061h'den 0063h'ye kadar olan karakterler sırasıyla 0041h'den 0043h'ye kadar olan karakterlerle eşleştirilir.

Birimi biçimlendirerek sıkıştırılmış bir büyük/küçük harf tablosu sağlama özelliği isteğe bağlıdır. Ancak hem sıkıştırılmamış hem de sıkıştırılmış bir büyük/küçük harf tablosunu yorumlamak zorunludur. TableChecksum alanının değeri, disk üzerindeki büyük harf tablosunun biçimiyle her zaman uyumludur ve bu tablo sıkıştırılmış veya sıkıştırılmamış formatta olabilir.

Bir birimi biçimlendirirken, uygulamalar önerilen büyük harf tablosunu kaydetmelidir (bkz. Tablo 25); bu tablo, sıkıştırılmış biçimde olmalı ve TableChecksum alanının değeri E619D30Dh'dir.

Bir uygulama sıkıştırılmış veya sıkıştırılmamış kendi büyük harf tablosunu tanımlarsa, bu tablo tam Unicode karakter aralığını (0000h karakter kodlarından FFFFh dahil) kapsamalıdır.