- 相關(guān)推薦
用擴(kuò)展INT13H研析并恢復(fù)大容量硬盤分區(qū)信息鏈表
用擴(kuò)展INT13H研析并恢復(fù)大容量硬盤分區(qū)信息鏈表
江西宜春學(xué)院計(jì)算機(jī)系 劉 健
內(nèi)容摘要:本文利用擴(kuò)展INT13H的磁盤地址數(shù)據(jù)包及相關(guān)調(diào)用,分析了整個(gè)分區(qū)鏈表并給出了鏈表中任一結(jié)點(diǎn)分區(qū)信息丟失或被破壞之后的一種恢復(fù)方法。
關(guān)鍵字:擴(kuò)展INT13H、數(shù)據(jù)包、分區(qū)信息、鏈表、恢復(fù)
一、 擴(kuò)展INT13H相關(guān)讀寫接口規(guī)范概述
擴(kuò)展INT13H接口設(shè)計(jì)的目的是為了擴(kuò)展BIOS的功能,使之能處理柱面數(shù)大于1024的硬盤,并支持移動(dòng)存貯介質(zhì)的鎖定、解鎖和彈出等各類新增功能。
1、 數(shù)據(jù)類型定義:
BYTE 一字節(jié); WORD 二字節(jié); DWORD 四字節(jié); QWORD 八字節(jié);
磁盤讀寫地址數(shù)據(jù)包DRWAP(Disk Read Write Address Packet),利用該數(shù)據(jù)包中斷INT13H可以直接讀寫處理目前主流硬盤上的任一扇區(qū),匆需理會(huì)傳統(tǒng)磁盤概念中的通過柱面號(hào)、磁頭號(hào)及扇區(qū)號(hào)(CHS)的物理扇區(qū)定位方式。
DRWAP結(jié)構(gòu)如下:
Struct DRWAP
{ BYTE PacketSize;//數(shù)據(jù)包所占字節(jié)數(shù),有10H和18H兩種,本文用前者
BYTE Reserved;//保留字節(jié),設(shè)為00H
WORD Blockcount;//傳輸?shù)臄?shù)據(jù)塊個(gè)數(shù)(最大值為7FH),以扇區(qū)為單位
DORD TransferBuffer;//傳輸緩沖區(qū)地址(SEG:OFFSET)
QORD AbsoluteBlockNumber;//磁盤起始絕對(duì)扇區(qū)號(hào)(主引導(dǎo)扇區(qū)為0號(hào))
}
AbsoluteBlockNumber與傳統(tǒng)CHS的關(guān)系如下:
AbsoluteBlockNumber=(Cylinder*NumHeads+Head)*SectorPerTrack+Sector-1
DRWAP數(shù)據(jù)包的獲取及實(shí)際操作
2、 定義磁盤讀寫地址數(shù)據(jù)包獲取指定扇區(qū)之內(nèi)容
入口參數(shù):AH=42H; DL=80H; DS:SI=DRWAP首地址
出口參數(shù):CF=NC OK;CF=CY ERROR
二、分區(qū)信息鏈表解析
讀取主引導(dǎo)扇區(qū)操作過程:(為操作的連續(xù)性,本文不采用傳統(tǒng)INT13H的功能號(hào)02)磁盤讀寫地址數(shù)據(jù)包按如下方式定義:
進(jìn)入DEBUG狀態(tài)之后,DS和SI采用當(dāng)前默認(rèn)值,假設(shè)為DS=1216,SI=0000 則E命令或F命令從1216:0000處輸入以下16個(gè)字節(jié)內(nèi)容
1216:0000 10 00 01 00 00 02 16 12-00 00 00 00 00 00 00
00
數(shù)據(jù)包長度=10H=16個(gè)字節(jié) 保留字節(jié)=00H 要傳輸?shù)纳葏^(qū)個(gè)數(shù)=0001H=1個(gè)
緩沖區(qū)地址DS:SI=1216:0200 磁盤起始絕對(duì)扇區(qū)號(hào)=0000000000000000H=0號(hào)
-A100
1216:0100 MOV AH,42
MOV DL,80
INT 13
INT 3
-G=100
-D3BE
80 01
1216:03B0 01 00 0B FE BF D9
3F 00-00 00 1B F2 B2 00 00 00
:03C0 81 DA 0F FE FF FF 5A F2-B2 00 3E DE E0 02 00 00
從上述內(nèi)容可知:
C區(qū)的起始點(diǎn)為0柱1頭1扇,即磁盤起始絕對(duì)扇區(qū)0號(hào);
C區(qū)的結(jié)束點(diǎn)為729柱254頭63扇,并隱含了63個(gè)扇區(qū);
C區(qū)共占用了00B2F21BH個(gè)扇區(qū)約為5.58GB。
整個(gè)擴(kuò)展分區(qū)的起點(diǎn)為730柱0頭1扇,其結(jié)束點(diǎn)由于柱面號(hào)已大大的大于1024,而10位二進(jìn)制數(shù)已不能表達(dá),所以其結(jié)束點(diǎn)一律記為254頭1023柱63扇,即 FE FF FF.
整個(gè)擴(kuò)展分區(qū)本身占用02E0DE3EH扇區(qū),5A F2 B2 00 為擴(kuò)展分區(qū)前所用扇區(qū)數(shù),即C區(qū)所用和隱含部分00B2F21BH+0000003FH=00B2F25AH
讀取邏輯D盤分區(qū)信息表:
從前面可知D盤之前已用00B2F25AH,由于起始絕對(duì)扇區(qū)號(hào)為零,因此D盤的入口地址為:00B2F25AH,所以磁盤讀寫地址數(shù)據(jù)包修改如下:
DS:0000 10 00 01 00 00 02 16 12 -5A F2 B2 00 00 00 00 00
-G=100
-D3BE
ds:3B0 00 01
:3C0 81 DA 0B FE FF FF 3F 00-00 00 1B F2 B2 00 00 00
:3D0 C1 FF 05 FE FF FF 5A F2-B2 00 54 DA D0 00
邏輯D盤的起點(diǎn)為730柱1頭1扇,0頭所含63扇隱含;
邏輯D盤的結(jié)束點(diǎn)由于柱面數(shù)超過1024,一律記為FE FF FF此后的邏輯盤結(jié)束點(diǎn)也一樣。
邏輯D盤自用00B2F21BH扇
后一分區(qū)表項(xiàng)記錄的是邏輯E盤的相關(guān)數(shù)據(jù):
邏輯E盤的起點(diǎn)由于柱面數(shù)超過1024,一律記為00 C1 FF,結(jié)束點(diǎn)為FE FF FF.
邏輯E盤之前已用的擴(kuò)展分區(qū)扇數(shù)00B2F21BH+0000003FH=00B2F25AH即D盤所用和D盤前隱含的部份 5A F2 B2 00
邏輯E盤所占扇區(qū)數(shù)(包含自身及隱含的0頭上的63扇)
對(duì)于后繼的各分區(qū)結(jié)點(diǎn)信息分析,可參照執(zhí)行完全類似。唯一需要注意的是,后繼結(jié)點(diǎn)分區(qū)信息表的入口地址,是其前繼結(jié)點(diǎn)的入口地址加上前繼結(jié)點(diǎn)的長度(包括隱含的3FH)。
三、 分區(qū)信息鏈表中任一結(jié)點(diǎn)分區(qū)信息的恢復(fù)
實(shí)際上對(duì)大容量硬盤分區(qū)信息的恢復(fù)有以下幾條規(guī)則:
1、 任何一分區(qū)所占用的扇區(qū)數(shù),在其所對(duì)應(yīng)的邏輯零扇區(qū)的偏移地址20H都有備份;
2、 活動(dòng)分區(qū)的起始點(diǎn)為0柱1頭1扇區(qū)即01 01 00,結(jié)束點(diǎn)可由上述備份反推求出柱面號(hào),磁頭號(hào)為FEH,扇區(qū)號(hào)為3FH,然后將柱面號(hào)和扇區(qū)號(hào)合并成兩個(gè)字節(jié),若備份容量大于傳統(tǒng)容量限制則為FE FF FF;
3、 每一結(jié)點(diǎn)分區(qū)信息中前一分區(qū)表項(xiàng)中的隱含扇區(qū)數(shù)為003FH,后一分區(qū)表項(xiàng)中的隱含扇區(qū)數(shù)分為兩種情況:在擴(kuò)展分區(qū)中該部分內(nèi)容為活動(dòng)分區(qū)大小加上隱含的63個(gè)扇區(qū);在邏輯分區(qū)中該部分內(nèi)容為前一結(jié)點(diǎn)信息中后一表項(xiàng)的兩個(gè)數(shù)據(jù)項(xiàng)之和;
4、 每一結(jié)點(diǎn)邏輯分區(qū)信息后一分區(qū)表項(xiàng)的最后四個(gè)字節(jié)內(nèi)容為下一結(jié)點(diǎn)前一分區(qū)表項(xiàng)的隱含扇區(qū)數(shù)與該分區(qū)所占扇區(qū)數(shù)之和;
5、 倒數(shù)第二個(gè)結(jié)點(diǎn)分區(qū)信息中的后一表項(xiàng)的兩個(gè)數(shù)據(jù)項(xiàng)之和等于擴(kuò)展分區(qū)所占用的總扇區(qū)數(shù);
6、 主分區(qū)信息表中分區(qū)類型標(biāo)志分別為0BH和 0FH,在后續(xù)邏輯分區(qū)信息表中分別為0BH和05H;(本文針對(duì)FAT32位分區(qū)方式,其它分區(qū)方式可相應(yīng)改動(dòng))
7、 任一結(jié)點(diǎn)邏輯分區(qū)信息所對(duì)應(yīng)的邏輯零扇區(qū)的入口地址等于該邏輯分區(qū)入口地址加上該分區(qū)所隱含的扇區(qū)數(shù),即3FH。
掌握以上幾條原則,即便整個(gè)分區(qū)信息鏈表全部破壞或丟失,都能從相關(guān)的邏輯零扇完全修復(fù)。
主分區(qū)信息的恢復(fù)過程操作概要:
第一步:活動(dòng)標(biāo)志和起始點(diǎn)是固定的 80 01 01 00 分區(qū)類型0BH,隱含扇區(qū)數(shù)是固定的3F 00 00 00,自用扇區(qū)總數(shù)從邏輯零扇區(qū)偏移20H處提取四個(gè)字節(jié)1B F2 B2 00。
利用公式 扇區(qū)總數(shù)=(柱面號(hào)*磁頭數(shù)+磁頭號(hào))*每磁道扇區(qū)數(shù)
扇區(qū)總數(shù)=00B2F21BH、磁頭數(shù)=FFH、磁頭號(hào)=FEH、每磁道扇區(qū)數(shù)=3FH,可推算柱面號(hào),就可得到活動(dòng)分區(qū)的結(jié)束點(diǎn)內(nèi)容。
第二步:擴(kuò)展分區(qū)的活動(dòng)標(biāo)志為00,起始點(diǎn)為下一個(gè)柱面號(hào)的0頭1扇即00 81 DA,分區(qū)類型為0FH,隱含部分=前一表項(xiàng)所占用扇區(qū)數(shù)與其前的隱含扇區(qū)之和,結(jié)束點(diǎn)由于已超過8.4G一律填為FE FF FF,擴(kuò)展分區(qū)所占用的總的扇區(qū)數(shù),可通過上述原則中的第5條計(jì)算出來。
地址:江西省宜春市宜春學(xué)院工學(xué)院計(jì)算機(jī)科學(xué)系
 
; 郵編:336000 電話:0795-3561890
emile:liubangling@sohu.com
【用擴(kuò)展INT13H研析并恢復(fù)大容量硬盤分區(qū)信息鏈表】相關(guān)文章:
C8051F的超大容量Flash存儲(chǔ)器擴(kuò)展08-06
256×32大容量中文矩陣系統(tǒng)的設(shè)計(jì)08-06
擴(kuò)展語句08-16
用“語句擴(kuò)展訓(xùn)練”培養(yǎng)學(xué)生寫作能力08-15
基于IDE硬盤的大容量語音記錄儀08-06
擴(kuò)展培訓(xùn)心得10-01
語文 -擴(kuò)展語句08-16
教學(xué)方式的擴(kuò)展08-17