天天看點

FAT32檔案系統之目錄項分析 (四)FAT32目錄項類型FAT32短檔案名目錄項分析FAT32長檔案名目錄項分析FAT32檔案系統根目錄與子目錄的管理

在FAT32檔案系統下,分區根目錄下的檔案及檔案夾的目錄項存放在根目錄區中,分區子目錄下的檔案及檔案

夾的目錄項存放在子目錄區中,根目錄和子目錄區都在資料區中。

FAT32目錄項類型

FAT32與FAT16目錄項一樣分為四類

短檔案名目錄項

長檔案名目錄項

“.”目錄項和“..”目錄項

卷标目錄項

FAT32短檔案名目錄項分析

         FAT32與FAT16隻有短檔案有差別,其他三類完全一樣,這裡隻是講述FAT32的短檔案名

FAT32短檔案名目錄項的含義

位元組偏移 字段長度 字段内容及含義
0x00 8 主檔案名
0x08 3 檔案的擴充名
0x0B 1 檔案屬性 00000000(讀/寫) 0x00
00000001(隻讀) 0x01
00000010(隐藏) 0x20
00000100(系統) 0x40
00001000(卷标) 0x08
00010000(子目錄)0x10
00100000(存檔) 0x20
0x0C 1 未用
0x0D 1 檔案建立時間精确到10ms的值
0x0E 2 檔案建立時間,包括時,分,秒
0x10 2 檔案建立日期,包括年,月,日
0x12 2 檔案最近通路日期,包括年,月,日
0x14 2 檔案起始簇号的最高位
0x16 2 檔案修改時間,包括時,分,秒
0x18 2 檔案修改日期,包括年,月,日
0x1A 2 檔案的起始簇号的低位
0x1c 4 檔案大小(以位元組為機關)

參數詳細分析

(1)主檔案名

檔案名用不完8個位元組,後面用空格(0x20)填充。

另外該位置的第一個位元組也用來表示目錄項的配置設定狀态,當這個位元組為 0x00時,表示該目錄從未用過,當這個

位元組是0xE5時,表示該目錄項曾經使用過,但目前已經被删除。

(2)檔案擴充名

沒有擴充名的用空格填充

(3)檔案屬性

檔案的各種屬性,表示的方法是按二進制位定義,最高兩位保留未用,

(1)      未用

(5)檔案建立時間精确到10ms的值

檔案在建立時的時間值中精确到10ms的值用該位元組表示。例如:86H,十進制為134,是以檔案建立的時間為

1340ms,即1.34s.

(6)檔案建立時間

A:0-4位,這5位記錄秒的值,機關是2s,也就是把這四位的值乘以2,才是秒的值,其取值範圍為0-29.

B:5-10位,這6位記錄分的值,其取值範圍為0-59.

C:11-15位,這5位記錄時的值,其取值範圍為0-23

計算出來的值再加上1340ms。才是檔案最終的建立時間。.

(7)檔案建立日期

A:0-4位,這5位記錄日的值,其取值範圍為0-31

B:5-8位,這4位記錄月的值,其取值範圍為0-12.

C:9-15位,這7位記錄年的值,其取值相對于1980年開始計數的,其值必須加上1980。

(8)檔案最近通路日期

同檔案建立日期算法一樣

(1)      檔案起始簇号的高位

是指檔案的内容所在的第一個簇号

(2)      檔案修改時間略

(3)      檔案修改日期略

(12)檔案起始簇号低位

是指檔案的内容所在的第一個簇号

(13)檔案大小以位元組大小為機關小端存儲

FAT32長檔案名目錄項分析

長檔案名目錄項

         為了相容DOS與Winddows 3.x在Winddows 95以上的系統中,超過8.3格式的檔案或目錄實際存儲着兩

個名字,一個短檔案名和一個長檔案名。當建立一個長檔案名時,其對應的短檔案名的處理有以下三個原則:

A:系統取長檔案名的前6個字元加上“~1”,形成短檔案名,其擴充名保持不變

B:如果已經存在這個名字的檔案,數字自動加1,“~2”

C:如果有DOS與Winddows 3.x的非法字元,以“­_”替代。

長檔案名存儲時,其屬性值為 OFH,能夠存儲13個字元,如果檔案名很長,一個長檔案名需要多個目錄項,

這些目錄是倒序排放在其短檔案名的前面。

                                     FAT32長檔案名目錄項的含義

位元組偏移 字段長度 字段内容及含義
0x00 1 序列号
0x01 10 檔案名的第1-5個Unicode碼字元
0x0B 1 屬性标志 OFH固定值
0x0C 1 保留未用
0x0D 1 短檔案名檢驗和
0x0E 12 檔案名的第6-11個Unicode碼字元
0x1A 2 始終為0
0x1c 2 檔案名的第12-13個Unicode碼字元

特殊說明

(4)      序列号

0-4位描述了長檔案名目錄項的順序号

6位若為1,則表明是目錄項的最後一項

如果檔案被删除,該位元組會改為“E5”。

(5)      檔案名字元

如果檔案名已經記錄完,但該參數的空間中還有未用的位元組,就會在檔案名最後一個字元填充兩個00H,随後

未用的填充FFH

(6)      短檔案名檢驗和

長檔案名目錄項通過這個檢驗和将其與短檔案名目錄項關聯起來。檢驗和是通過短檔案名計算而來的,同一長

檔案名的檢驗和必須一緻。

         校驗和的計算方法是依次将短檔案名的各個字元對應的二進制相加,在每一步相加之前先将二進制的值依

次向右移動一位,最右邊的位循環移動到最左邊,然後再加上下一個字元所對應的二進制值,直到把最後一個字

符加完。

“.”目錄項(目前目錄)和“..”目錄項(上級目錄)

         在子目錄所在的檔案目錄項區域中,總有兩個特殊的目錄,“.”目錄項和“..”目錄項可以用DOS指令的DIR查

看到。

說明

A:“.”目錄項所描述的起始簇号,是子目錄本身所在簇号,

B:“..”目錄項所描述的起始簇号,是上一級目錄的起始簇号,如果上級目錄為根目錄,則起始簇号被設定為0.

C:這兩個目錄都大小被設定0,同其他的檔案夾目錄項一樣。

系統利用“.”目錄項(目前目錄)和“..”目錄項實作目錄之間的雙向聯系,進而把整個檔案系統聯系在一起。

卷标目錄項

         卷标可以被随時修改,存放在FDT中,

A:卷标屬于短檔案名,最大支援11個字元。

B:不記錄起始簇号與大小

C:不記錄建立時間和最後通路時間,隻記錄修改時間

FAT32檔案系統根目錄與子目錄的管理

         FAT32檔案系統對于根目錄下檔案和管理,統一在資料區中的根目錄為這些檔案建立目錄項,并由FAT

表為檔案的内容配置設定簇存放資料。而根目錄的首簇由格式化程式決定,并存放在DBR的BPB中。如果根目錄

下的目錄項數目過多,這些檔案的目錄項在根目錄區的首簇存放不下,FAT表就會為根目錄配置設定新的簇來存

放根目錄下檔案及檔案夾的目錄項。

根目錄管理步驟

第1步:定位DBR

第2步:定位根目錄首簇

第3步:定位目錄項

第4步:定位FAT

第5步:定位資料區

子目錄管理步驟

第1步:定位DBR

第2步:定位根目錄首簇

第3步:定位子目錄項

第4步:定位子目錄簇

第5步:定位子目錄檔案

第6步:定位FAT

第7步:定位資料區