用扩展INT13H研析并恢复大容量硬盘分区信息链表
来源:网络 时间:2022-03-19
内容摘要:本文利用扩展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
[1] [2] 下一页