- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2004-01-05_优盘文件系统(FOR C)
优盘文件系统(FOR C )
优盘文件系统(FOR C)
优盘上的数据按照其不同的特点和作用大致可分为 5 部分:MBR 区、DBR 区、FAT 区、FDT
区和 DATA区。
主引导记录(MBR)
绝对扇区号为:MBR_LBA=0是主引导记录,等同位于硬盘的0磁道0柱面1扇区。
在总共 512 字节的主引导扇区中,MBR 只占用了其中的 446 个字节(ofs:0 - ofs:1BDH),
另外的 64个字节(ofs:1BEH - ofs:1FDH)交给了 DPT(Disk Partition Table 盘分区表),
最后两个字节“55 AA”(ofs:1FEH - ofs:1FFH)是分区的结束标志。
MBR定义如下:
typedef struct {
uchar bootcode[446]; //ofs:0.启动代码。“FA 33 C0 8E D0 BC…”.
PartitionTable PT[4]; //ofs:446.分区表 length=4*16.
uint EndingFlag; //ofs:510.结束标识:0xAA55.
}MBR_tag;
Bootcode[446]启动代码一般是固定的,用于引导 x86,不用管。
分区表项的定义如下:
typedef struct {
uchar BootFlag; //启动标志
CHS StartCHS; //分区开始的柱面、磁头、扇区
uchar SystemID; //分区类型
CHS EndCHS; //分区结束的柱面、磁头、扇区
ulong RelativeSectors; //分区起始扇区数,指分区相对于记录该分区的分区表的扇
区位置之差 (该分区表:LBA=0x0)。
ulong TotalSectors;//分区总扇区数
}PartitionTable;
其中 CHS为一个柱面、磁头、扇区的结构,定义如下:
struct CHS {
uchar Head; //磁头。
unsigned Sector : 6; //扇区。
unsigned CyH2 : 2; //柱面(高两位)。
uchar CyL8; //柱面(低八位)。
ulong Cylinder() {return (uint(CyH2)*256+CyL8);} //返回柱面值
void SetCylinder(uint Cylinder) //设置柱面值 {
CyH2=(Cylinder8)0x3; CyL8=(Cylinder0xff);
}
};
例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
1 wenxinglu
优盘文件系统(FOR C )
在这里我们可以看到:
“80”是一个分区的激活标志,表示系统可引导;
“01 01 00”表示分区开始的磁头号为 01,开始的扇区号为 01,开始的柱面号为 00;
“0B”表示分区的系统类型是 FAT32,其他比较常用的有 04(FAT16)、06(bigFAT16)、
01(FAT12)、07(NTFS);
“FE BF FC”表示分区结束的磁头号为 254,分区结束的扇区号为 63、分区结束的柱面
号为 764;
“3F 00 00 00”表示首扇区的相对扇区号为 63;
“7E 86 BB 00”表示总扇区数为
系统引导记录(DBR)
绝对扇区号为:DBR_LBA=MBR.PT[0].RelativeSectors 处是 DBR,等同位于硬盘的 0 磁道 1
柱面 1 扇区(512 字节),是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一
个被称为 BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当 MBR
将系统控制权交给它时,判断本分区跟目录前两个文件是不是
文档评论(0)