c语言如何读写与重建MBR
发布网友
发布时间:2022-05-11 10:32
我来回答
共1个回答
热心网友
时间:2023-10-11 07:48
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer);
cmd为功能号:
0 重置软磁盘系统.这强迫驱动器控制器来执行硬复位.忽略所有其它参数.
1 返回最后的硬盘操作状态.忽略所有其它参数
2 读磁盘,读的位置由head、track、sector给出,读取nsects个扇区到buffer中;
3 写磁盘。写的位置是head、track、sector开始的nsects个扇区。要写的数据在buffer中。
drive为驱动器号(0=A,1=B,0x80=C,0x81=D,0x82=E,依次类推)
head为磁头 track为磁道 sector为扇区
nsects为要读或写的扇区数
MBR在磁盘的0面0道1扇区,长度为512字节,所以读取第1块硬盘的MBR可以用:
char mbr_buffer[512];
biosdisk(2, 0x80, 0, 0, 1, 1, mbr_buffer);
但是,这不是C语言的标准函数,而是某些编译器的扩展,本质上是BIOS软中断INT13H的接口。所以兼容性受到很大*,比如正常情况下,在Windows环境中不允许这样直接访问硬件的程序运行的,可以在实模式下试试。而且一定要小心,读还可以,千万不要轻易写,一旦出错就麻烦了。追问那如何重建呢?写的语句也给个,电脑上装有还原精灵,我只是想备份MBR后重建,修改文件后再写回去!
追答写和读语法完全相同,只是写的命令代码为3。
与读类似,假定要写的内容已经放在起始位置为mbr_buffer的缓存中,就可以这样写到第1块硬盘的MBR中去:
if ( mbr_buffer[510] == 0x55 && mbr_buffer[511] == 0xAA )
biosdisk(3, 0x80, 0, 0, 1, 1, mbr_buffer);
else
perror("缓冲区内容错误!如果执行写操作,将使系统瘫痪!");