1. 程式人生 > >FAT16檔案系統之目錄項分析(四)

FAT16檔案系統之目錄項分析(四)

FAT16檔案系統的FDT分析

1:FDT位置

FDT的含義為檔案目錄表,它在一個檔案系統中的具體位置是緊跟在FAT2之後。

定位過程:

A:系統通過讀取該分割槽表資訊,定位到其DBR扇區

B:讀取DBR的保留扇區數(OEH –0FH).

C:讀取每個FAT扇區數(16H – 17H)

D:讀取FAT表的個數保留扇區當數 +  FAT個數 * 每個FAT扇區數

FDT的資料內容


FAT16檔案系統目錄項分析

1:目錄項的作用及結構特點

目錄項對於FAT檔案系統來講也是很重要的一個組成部分,其主要及結構特點如下

A:分割槽中的每一個檔案中資料夾都被分配一個大小為32位元組的目錄項,用心描述檔案或資料夾的屬性,大小,起始簇號和時間,日期等資訊,那當然也有檔案或資料夾的名字

B:在FAT檔案系統中,目錄被視為特殊型別的檔案,所以每一個目錄也跟檔案一樣有目錄項。

C:在FAT16檔案系統下,分割槽根目錄下的檔案及資料夾的目錄項存放在FDT中,分割槽子目錄下的檔案及資料夾的目錄項存放在資料區中相應的簇中。

D:根據目錄項的作用及特點,可以把目錄項分為四類

短檔名目錄項長檔名目錄項“.”目錄項和“..”目錄項卷標目錄項

2:短檔名目錄項

所謂的短檔名是指DOS和Windows 3.x時代檔名的傳統格式即“8.3”格式。在這種格式的限制下,使用者在給檔案起名字的時候,主檔名不能超過8個字元,並且不支援中文。在這種格式下,檔案目錄項中只需要記錄8 + 3 = 11位元組就可以儲存檔名了,(主檔名與副檔名之間的“.”是預設的,不有記錄),這種格式的目錄項就是短檔名目錄項.

FAT16短檔名目錄項的含義

位元組偏移

欄位長度

欄位內容及含義

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)      檔案屬性

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

(4)      未用

(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)      檔案最近訪問日期

同文件建立日期演算法一樣

(9)      未用

(10)  檔案修改時間略

(11)  檔案修改日期略

(12)  檔案起始簇號

是指檔案的內容所在的第一個簇號

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

3:長檔名目錄項

         為了相容DOS與Winddows 3.x在Winddows 95以上的系統中,超過8.3格式的檔案或目錄實際儲存著兩個名字,一個短檔名和一個長檔名。當建立一個長檔名時,其對應的短檔名的處理有以下三個原則:

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

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

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

長檔名儲存時,其屬性值為 OFH,能夠儲存13個字元,如果檔名很長,一個長檔名需要多個目錄項,這些目錄是倒序排放在其短檔名的前面。

                                     FAT16長檔名目錄項的含義

位元組偏移

欄位長度

欄位內容及含義

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碼字元

特殊說明

(1)      序列號

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

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

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

(2)      檔名字元

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

(3)      短檔名檢驗和

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

         校驗和的計算方法是依次將短檔名的各個字元對應的二進位制相加,在每一步相加之前先將二進位制的值依次向右移動一位,最右邊的位迴圈移動到最左邊,然後再加上下一個字元所對應的二進位制值,直到把最後一個字元加完。

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

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

說明

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

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

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

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

5:卷標目錄項

         卷標可以被隨時修改,存放在FDT中,

A:卷標屬於短檔名,最大支援11個字元。

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

C:不記錄建立時間和最後訪問時間,只記錄修改時間