FAT32中文版分析+補充(2)

從Offset 36(0x24)開始FAT12/16的內容開始區別於FAT32,如今分兩個表格列出來,下表爲FAT12/16的內容:工具

名稱 Offset(Byte) 大小(Byte) 描述
BS_drvNum 36(0x24) 1 用於BIOS中斷0x13獲得磁盤驅動器參數,(0x00爲軟盤,0x80爲硬盤)。
NOTE:此域的值實際上由操做系統來決定。
BS_Reserved1(壹) 37(0x25) 1 保留(供NT使用),格式化FAT卷時必須把此域設置爲0。
BS_BootSig 38(0x26) 1 擴展引導標記(0x29),用於指明此後的三個域可用。
BS_VolID 39(0x27) 4 卷標序列號,此域以BS_VolLab一塊兒,可用用來檢測磁盤是否正確,FAT文件系統可用用此判斷鏈接的可移動磁盤是否正確,此域每每是由時間和日期組成的一個32位值。
BS_VolLab 43(0x2B) 11 磁盤卷標,此域的值必須與根目錄中11字節長的卷標一致。
NOTE:FAT文件系統必須保證在根目錄的卷標文件更改或是建立的同時,此域的內容能獲得及時的更新,當FAT卷沒有卷標時,此域的內容爲「NO NAME」。
BS_FileSysType 54(0x36) 8 如下的幾種之一:「FAT12」、「FAT16」、「FAT32」。
NOTE:很多人錯誤認爲FAT文件系統的類型由此域來肯定,仔細點你就能發現此域並非BPB的一部分,只是一個字符串而已,Microsoft的操做系統並不使用此域來肯定FAT文件的類型,由於它經常被寫錯,或是根本不存在,後面將討論如何來檢測一個FAT文件系統的類型,但無論如何,建議您在此域填寫正確信息,由於一些非Microsoft的操做系統會檢測此域。


下標爲FAT32的內容:spa

名稱 Offset(Byte) 大小(Byte) 描述
BPB_FATSz32 36(0x24) 4 一個FAT表所佔的扇區數,此域爲FAT32特有,同時BPB_FATSz16必須爲0。
BPB_ExtFlags 40(0x28) 2 此域FAT32特有。
Bits 0~3:不小於0的活動FAT(active FAT)數目,只有在鏡像
             (mirroring)禁止時纔有效。
Bits 4~6:保留;
Bits 7:——0  表示FAT實時鏡像到全部的FAT表中;
            ——1  表示只有一個活動的FAT表,這個表就是Bits 0~3
                       所指定的那個。
Bits 8~15:保留。
BPB_FSVer 42(0x2A) 2 此域FAT32特有。高位爲FAT32的主版本號,低位爲次版本號,這個版本號是爲了之後更高級的FAT版本考慮,假設當前的操做系統所能支持的FAT32版本號爲0:0。那麼該操做系統檢測到此域不爲0時,它便會忽略這個FAT卷,由於它的版本號比系統能支持的版本要高。
BPB_RootClus 44(0x2C) 4 此域FAT32特有。根目錄所在第一個簇的簇號,一般該數值爲2,擔不是必須爲2。
NOTE:磁盤工具在改變根目錄位置時,必須想辦法讓磁盤上的第一個非壞簇做爲根目錄的第一個簇(好比第2簇,除非它已經被標記爲壞簇),這樣的話,若是此域正好爲0的話,磁盤檢測工具也能很輕鬆地找到根目錄所在簇的位置。
BPB_FSInfo 48(0x30) 2 此域FAT32特有。保留區中FAT32卷FSINFO結構所佔的扇區數,一般爲1。
NOTE:在Backup Boot中會有一個FSINFO的備份,但該備份只是更新其中的指針,也就是說不管是主引導記錄,仍是備份引導記錄都是指向同一個FSINFO結構。
BPB_BkBootSec 50(0x32) 2 此域FAT32特有。若是不爲0,表示在保留區中引導記錄的備份數據所佔的扇區數,一般爲6。同時不建議使用6之外的其餘數值。
BPB_Reserved 52(0x34) 12 此域FAT32特有。用於之後的FAT擴展使用,對於FAT32,此域用0填充。
BS_DrvNum 64(0x40) 1 與FAT12/FAT16的定義相同,只不過二者位於啓動扇區不一樣位置而已。
BS_Reserved1 65(0x41) 1 與FAT12/FAT16的定義相同,只不過二者位於啓動扇區不一樣位置而已。
BS_BootSig 66(0x42) 1 與FAT12/FAT16的定義相同,只不過二者位於啓動扇區不一樣位置而已。
BS_VolID 67(0x43) 4 與FAT12/FAT16的定義相同,只不過二者位於啓動扇區不一樣位置而已。
BS_FileSysType 71(0x47) 11 與FAT12/FAT16的定義相同,只不過二者位於啓動扇區不一樣位置而已。
BS_FileSysType 82(0x52) 8 一般設置爲「FAT32」,請參照FAT12/FAT16部分關於此域的陳述,該域的內容和FAT類型的斷定無關。


關於FAT的啓動扇區還有一點重要的說明:咱們假設裏面的內容是按照字節排序的,那麼扇區[510]的內容必定是0x55,扇區[511]的內容必定是0xAA。

NOTE:不少FAT的資料文檔會錯誤地把0xAA55說成是「啓動扇區最後兩字節的內容」,這樣的陳述是正確的,若是,僅僅是若是——BPB_BytesPerSec的值爲512的話。如果BPB_BytesPerSec的值大於512,該標記的位置並無變(雖然在啓動扇區的最後兩個字節寫上0xAA55徹底沒有問題)。
     關於BPB_TotSec16/32這裏再做一點補充:假設如今咱們有一塊磁盤或者一個分區,其扇區數爲DskSz,若是BPB_aTotSec(BPB_TotSec16或是BPB_TotSec32其中不爲0的那個)的值小於或等於DskSz並不會使該FAT卷在使用中出現什麼錯誤,實際上,BPB_TotSec16/32的值不要比DskSz小得離譜就不會有什麼錯誤。
     這樣作將形成磁盤空間的浪費,程序自己並不會認爲該FAT卷存在什麼錯誤。可是,若是BPB_TotSec16/32的值比DskSz大的話將會使FAT卷遭受嚴重的損壞。由於它超出了存儲介質或是磁盤分區的邊界。當BPB_TotSec16/32的值比DskSz大時,一些數據將不幸地被丟失。操作系統

相關文章
相關標籤/搜索