工控编程吧
标题:
上位机MFC读取与修复MBR源代码
[打印本页]
作者:
qq263946146
时间:
2019-9-25 11:23
标题:
上位机MFC读取与修复MBR源代码
(, 下载次数: 1)
上传
点击文件名下载附件
例程实现读写磁盘主引导区(MBR),
效果如上图。
部分关键代码如下。
读取代码:
void CRW_HDDDlg::OnButtonReadDPT()
{
// TODO: Add your control notification handler code here
int disk_num=m_CtrlCombo.GetCurSel(); //获取ComboBox数据,即驱动器号
CString disk_char;
disk_char.Format("%d",disk_num); //转换成字符串类型
unsigned char *buffDPT=(unsigned char*)malloc(512);
buffDPT=ReadSectors(0,1,disk_char);
CString DPT;
m_strEDIT=BcdToAsc(buffDPT,512);
UpdateData(false);
}
复制代码
修复代码:
void CRW_HDDDlg::OnButtonRepair()
{
int disk_num=m_CtrlCombo.GetCurSel(); //获取ComboBox数据,即驱动器号
CString disk_char;
disk_char.Format("%d",disk_num); //转换成字符串类型
CDialog::SetWindowText(disk_char);
//读取正确MBR文件
unsigned char *buff=(unsigned char*)malloc(512); //存正确MBR
unsigned char *DPT=(unsigned char*)malloc(512); //存正确的DPT
HANDLE filehandle = CreateFile("112",
GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD byte1;
ReadFile(filehandle,buff,512,&byte1,NULL);
CloseHandle(filehandle);
DPT=ReadSectors(0,1,disk_char); //读选定磁盘001扇区
for(int i=446;i<=512;i++){buff[i]=DPT[i];}
//写入磁盘001扇区
WriteSectors(0,1,disk_char,buff);
MessageBox("该驱动器MBR修复完成!",NULL,MB_OK);
}
复制代码
源代码下载地址。
(, 下载次数: 0)
上传
点击文件名下载附件
[MFC408]1[/MFC408]
[halcon]1[/halcon]
[weixinlianxi]1[/weixinlianxi]
MBR是主引导记录(Master Boot Record)的英文缩写,
在传统硬盘分区模式中,引导扇区是每个分区(Partition)的第一扇区,
而主引导扇区是硬盘的第一扇区。
为了方便计算机访问硬盘,
把硬盘上的空间划分成许许多多的区块(英文叫sectors,即扇区),
然后给每个区块分配一个地址,称为逻辑块地址(即LBA)。
在MBR中,分区表的大小是固定的,一共可容纳4个主分区信息。
在MBR分区表中逻辑块地址采用32位二进制数表示,
因此一共可表示2^32(2的32次方)个逻辑块地址。
如果一个扇区大小为512字节,那么MBR硬盘最大分区容量仅为2TB。
(, 下载次数: 0)
上传
点击文件名下载附件
扩展资料:
启动PC机时,系统首先对硬件设备进行测试,
测试成功后进入自举程序INT 19H,
然后读系统磁盘0柱面、0磁头、1扇区的主引导记录(MBR)内容到内存指定单元0:
7C00地址开始的区域,并执行MBR程序段。
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4