用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧计算机应用

用扩展INT13H研析并恢复大容量硬盘分区信息链表

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 11:50:17
【本文由PB创新网为您整理】内容摘要:本文利用扩展INT13H的磁盘地址数据包及相关调用,分析了整个分区链表并给出了链表中任一结点分区信息丢失或被破坏之后的一种恢复方法。
 
关键字:扩展INT13H、数据包、分区信息、链表、恢复
 
一、 扩展INT13H相关读写接口规范概述
扩展INT13H接口设计的目的是为了扩展BIOS的功能,使之能处理柱面数大于1024的硬盘,并支持移动存贮介质的锁定、解锁和弹出等各类新增功能。
1、 数据类型定义:
BYTE  一字节; WORD  二字节; DWORD 四字节;  QWORD 八字节;
磁盘读写地址数据包DRWAP(Disk Read Write Address Packet),利用该数据包中断INT13H可以直接读写处理目前主流硬盘上的任一扇区,匆需理会传统磁盘概念中的通过柱面号、磁头号及扇区号(CHS)的物理扇区定位方式。
DRWAP结构如下:
  Struct DRWAP
{  BYTE  PacketSize;//数据包所占字节数,有10H和18H两种,本文用前者
   BYTE  Reserved;//保留字节,设为00H
WORD Blockcount;//传输的数据块个数(最大值为7FH),以扇区为单位
DORD TransferBuffer;//传输缓冲区地址(SEG:OFFSET)
QORD AbsoluteBlockNumber;//磁盘起始绝对扇区号(主引导扇区为0号)
}
AbsoluteBlockNumber与传统CHS的关系如下:
AbsoluteBlockNumber=(Cylinder*NumHeads+Head)*SectorPerTrack+Sector-1
DRWAP数据包的获取及实际操作
2、 定义磁盘读写地址数据包获取指定扇区之内容
入口参数:AH=42H; DL=80H; DS:SI=DRWAP首地址
  出口参数:CF=NC OK;CF=CY ERROR
 
二、分区信息链表解析 
读取主引导扇区操作过程:(为操作的连续性,本文不采用传统INT13H的功能号02)磁盘读写地址数据包按如下方式定义:
进入DEBUG状态之后,DS和SI采用当前默认值,假设为DS=1216,SI=0000    则E命令或F命令从1216:0000处输入以下16个字节内容
1216:0000 10  00  01  00  00  02  16  12-00  00  00  00  00  00  00  00
 数据包长度=10H=16个字节      保留字节=00H     要传输的扇区个数=0001H=1个
 缓冲区地址DS:SI=1216:0200     磁盘起始绝对扇区号=0000000000000000H=0号
-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
从上述内容可知:
C区的起始点为0柱1头1扇,即磁盘起始绝对扇区0号;
C区的结束点为729柱254头63扇,并隐含了63个扇区;
C区共占用了00B2F21BH个扇区约为5.58GB。
整个扩展分区的起点为730柱0头1扇,其结束点由于柱面号已大大的大于1024,而10位二进制数已不能表达,所以其结束点一律记为254头1023柱63扇,即 FE FF FF.
整个扩展分区本身占用02E0DE3EH扇区,5A F2 B2 00 为扩展分区前所用扇区数,即C区所用和隐含部分00B2F21BH+0000003FH=00B2F25AH
 
读取逻辑D盘分区信息表:
从前面可知D盘之前已用00B2F25AH,由于起始绝对扇区号为零,因此D盘的入口地址为:00B2F25AH,所以磁盘读写地址数据包修改如下:
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盘的起点为730柱1头1扇,0头所含63扇隐含;
逻辑D盘的结束点由于柱面数超过1024,一律记为FE FF FF此后的逻辑盘结束点也一样。
逻辑D盘自用00B2F21BH扇
后一分区表项记录的是逻辑E盘的相关数据:
逻辑E盘的起点由于柱面数超过1024,一律记为00 C1 FF,结束点为FE FF FF.
逻辑E盘之前已用的扩展分区扇数00B2F21BH+0000003FH=00B2F25AH即D盘所用和D盘前隐含的部份 5A F2 B2 00
逻辑E盘所占扇区数(包含自身及隐含的0头上的63扇)
 
对于后继的各分区结点信息分析,可参照执行完全类似。唯一需要注意的是,后继结点分区信息表的入口地址,是其前继结点的入口地址加上前继结点的长度(包括隐含的3FH)。
三、 分区信息链表中任一结点分区信息的恢复
实际上对大容量硬盘分区信息的恢复有以下几条规则:
1、 任何一分区所占用的扇区数,在其所对应的逻辑零扇区的偏移地址20H都有备份;
2、 活动分区的起始点为0柱1头1扇区即01 01 00,结束点可由上述备份反推求出柱面号,磁头号为FEH,扇区号为3FH,然后将柱面号和扇区号合并成两个字节,若备份容量大于传统容量限制则为FE FF FF;
3、 每一结点分区信息中前一分区表项中的隐含扇区数为003FH,后一分区表项中的隐含扇区数分为两种情况:在扩展分区中该部分内容为活动分区大小加上隐含的63个扇区;在逻辑分区中该部分内容为前一结点信息中后一表项的两个数据项之和;
4、 每一结点逻辑分区信息后一分区表项的最后四个字节内容为下一结点前一分区表项的隐含扇区数与该分区所占扇区数之和;
5、 倒数第二个结点分区信息中的后一表项的两个数据项之和等于扩展分区所占用的总扇区数;
6、 主分区信息表中分区类型标志分别为0BH和 0FH,在后续逻辑分区信息表中分别为0BH和05H;(本文针对FAT32位分区方式,其它分区方式可相应改动)
7、 任一结点逻辑分区信息所对应的逻辑零扇区的入口地址等于该逻辑分区入口地址

[1] [2]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:30,468.75000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号