上篇文章讲述了MBR分区表的分析过程,这篇我们开始讲一下如何构造一个MBR分区表。
首先从最简单的没有扩展分区的分区表开始构建:
typedef struct tagMBR_PTITEM
{
/*00*/ UCHAR byState; //分区状态, 0 = 未激活, 0x80 = 激活
/*01*/ UCHAR byBeginHead; //分区起始磁头号
/*02*/ USHORT wBeginSC; //分区起始扇区和柱面号, 底字节的低6位为扇区号, 高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
/*04*/ UCHAR byFSID; //分区类型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此项未用
/*05*/ UCHAR byEndHead; //分区结束磁头号
/*06*/ USHORT wEndSC; //分区结束扇区和柱面号
/*08*/ ULONG dwBeginSector; //在线性寻址方式下的分区相对扇区地址
/*012*/ ULONG dwSectors; //分区大小 (总扇区数)
/*16*/
} MBR_PTITEM,FAR * LPMBR_PTITEM; //磁盘的分区信息
#define GETSC_C(SC) ((((SC) & 0xc0) << 2) + ((SC) & 0xff)