📄 fat1.h
字号:
struct MBR
{uchar RegionFlag; //446 活动分区标志
uchar StartHead; //447 分区起始磁头号
uchar StartCS; //448 分区起始扇区号(L6BIT)和起始柱面号(H2BIT)
uchar StartCylinder; //449 起始柱面低8位
uchar DosVer; //450 系统标示
uchar StopHead; //451 结束磁头号
uchar StopCS; //452 结束扇区号(L6BIT)和起始柱面号(H2BIT)
uchar StopCylinder; //453 结束柱面低8位
uchar LogicSector[4]; //454~457 该分区起始相对逻辑扇区号
uchar TotalSector[4]; //458~461 该分区所有扇区数
}mbr;
struct BPB
{uchar JMPBOOT[3]; //0~2 跳转指令
uchar OEMName[8]; //3~10 OEM NAME
uchar BytePerSector[2]; //11~12 每扇区字节数
uchar SecPerClus; //13 每簇扇区数
uchar RsvdSecCnt[4]; //14~15 保留扇区数 ************方便计算
uchar NumFATs; //16 FAT表数
uchar RootEntCnt[2]; //17~18 根目录入口数
uchar TotSec16[2]; //19~20 16扇区总数
uchar Media; //21 媒质属性
uchar FATSz16[2]; //22~23 一个FAT16表所占扇区数
uchar SecPerTrk[2]; //24~25 每磁道扇区数
uchar NumHeads[2]; //26~27 磁头数
uchar HiddSec[2]; //28~31 隐藏扇区数
uchar TotSec32[4]; //32~35 32扇区总数
uchar DrvNum; //36 DRIVE NUMBER
uchar Reserved; //37 保留
uchar BootSig; //38 扩展根结构 0X29
uchar VolID[4]; //39~42 卷序列号
uchar VolLab[11]; //43~53 卷标
uchar FilSysType[8]; //54~61 "FAT12,FAT16,FAT32"字符串
}bpb;
extern GetLogicSector(void)
{WriteCHS(0,0,0,0); //LBA=0x00000000
WriteCommand(0x20); //读硬盘命令
GetData(); //返回MBR内容到BUFFER数组
mbr.LogicSector[0]=BUFFER[454];
mbr.LogicSector[1]=BUFFER[455];
mbr.LogicSector[2]=BUFFER[456];
mbr.LogicSector[3]=BUFFER[457];
}
extern GetBPBSector(void)
{WriteCHS(mbr.LogicSector[3],mbr.LogicSector[2],mbr.LogicSector[1],mbr.LogicSector[0]);//LBA=该分区起始相对逻辑扇区号
WriteCommand(0x20); //读硬盘命令
GetData(); //返回MBR内容到BUFFER数组
bpb.BytePerSector[0]=BUFFER[11];
bpb.BytePerSector[1]=BUFFER[12];
bpb.SecPerClus=BUFFER[13];
bpb.RsvdSecCnt[0]=BUFFER[14];
bpb.RsvdSecCnt[1]=BUFFER[15];
bpb.RsvdSecCnt[2]=0;
bpb.RsvdSecCnt[3]=0;
bpb.NumFATs=BUFFER[16];
bpb.RootEntCnt[0]=BUFFER[17];
bpb.RootEntCnt[1]=BUFFER[18];
bpb.FATSz16[0]=BUFFER[22];
bpb.FATSz16[1]=BUFFER[23];
}
extern Uint32 GetLBA(uchar *S1,uchar *S2)
{Uint32 LBA;
Uint32 LBA10,LBA11,LBA12,LBA13;
Uint32 LBA20,LBA21,LBA22,LBA23;
LBA10=(Uint32)(*(S1));
LBA11=(Uint32)(*(S1+1));
LBA12=(Uint32)(*(S1+2));
LBA13=(Uint32)(*(S1+3));
LBA20=(Uint32)(*(S2));
LBA21=(Uint32)(*(S2+1));
LBA22=(Uint32)(*(S2+2));
LBA23=(Uint32)(*(S2+3));
LBA=LBA10+(LBA11<<8)+(LBA12<<16)+(LBA13<<24)+LBA20+(LBA21<<8)+(LBA22<<16)+(LBA23<<24);
return(LBA);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -