免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3832 | 回复: 8
打印 上一主题 下一主题

请问有没有C写的恢复硬盘分区的源代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-20 20:03 |只看该作者 |倒序浏览
或者相关的资料

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-05-20 20:10 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

这个我没整过,你到网上找找,或许那个兄弟做过。

论坛徽章:
0
3 [报告]
发表于 2003-05-20 22:29 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

我在solaris版看到过,在精华帖里找找

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2003-05-21 11:36 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

我有一本书,叫“硬盘数据保护与加密技术”。

论坛徽章:
0
5 [报告]
发表于 2003-05-23 01:48 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

谢谢了

论坛徽章:
0
6 [报告]
发表于 2003-05-23 01:56 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

#include<bios.h>;
#include<stdio.h>;
#include<dos.h>;
void write_pt(int cyl);
unsigned char sect[1024],boot[512];
int cyls;int heads;int sects;
main()
{int i;union REGS r;
r.h.ah=8;
r.h.dl=0x80;
int86(0x13,&r,&r);
if(r.h.ah){printf("Hard disk not ready error! \n";
exit(0);}
heads=r.h.dh+1;
cyls=r.h.ch+256*(r.h.cl>;>;6)+1;
sects=r.h.cl&0x3f;
printf("Searching.......\n";
for(i=1;i<cyls;i++)
{if (kbhit())exit(0);
biosdisk(2,0x80,1,i,1,2,sect);
if(sect[0]==0xeb&&sect[1]==0x3c&&sect[2]==0x90
&&sect[510]==0x55&&sect[511]==
0xaa&&sect[512]==0xf8&&sect[513]==0xff&&sect[514]==0xff)
{write_pt(i);exit(0);}}
write_pt(cyls);}
void write_pt(int cyl)
{char ch;
union cc{char ch[2];unsigned int i;}c;
union ll{char ch[5];long i;}l;
int i;unsigned char t1[16],t2[16];
t1[0]=0x80;
t1[1]=0x01;
t1[2]=0x01;
t1[3]=0x00;
t1[4]=0x04;
t1[5]=heads-1;
c.i=cyl-1;
t1[7]=c.ch[0];
t1[6]=c.ch[1]<<6|sects;
t1[8]=sects;
t1[9]=0;
t1[10]=0;
t1[11]=0;
l.i=(long)cyl*sects*heads-sects;
t1[12]=l.ch[0];
t1[13]=l.ch[1];
t1[14]=l.ch[2];
t1[15]=l.ch[3];
if(cyl<cyls){
t2[0]=0;
t2[1]=0;
c.i=cyl;
t2[2]=c.ch[1]<<6|1;
t2[3]=c.ch[0];
t2[4]=0x05;
t2[5]=heads-1;
c.i=cyls-1;
t2[7]=c.ch[0];
t2[6]=c.ch[1]<<6|sects;
l.i=l.i+sects;
t2[8]=l.ch[0];
t2[9]=l.ch[1];
t2[10]=l.ch[2];
t2[11]=l.ch[3];
l.i=(long)cyls*sects*heads-l.i;
t2[12]=l.ch[0];
t2[13]=l.ch[1];
t2[14]=l.ch[2];
t2[15]=l.ch[3];
}
else for(i=0;i<16;i++)t2=0;
printf("The Partition table is: \n";
for(i=0;i<16;i++)printf("%3x",t1);
printf("\n";
for(i=0;i<16;i++)printf("%3x",t2);
printf("\nAre you sure you want to write into the disk?(n)";
ch=getche();
if(ch=='Y'||ch=='y'){
biosdisk(2,0x80,0,0,1,1,boot);
for(i=0;i<0x10;i++)boot[0x1be+i]=t1;
for(i=0;i<0x10;i++)boot[0x1ce+i]=t2;
boot[510]=0x55;
boot[511]=0xaa;
biosdisk(3,0x80,0,0,1,1,boot);
}}


有人可以帮忙注解一下吗
我看不大明白,谢谢了

论坛徽章:
0
7 [报告]
发表于 2003-05-23 13:59 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

谁可以说明一下这个程序的意思阿

论坛徽章:
0
8 [报告]
发表于 2003-05-23 18:12 |只看该作者

请问有没有C写的恢复硬盘分区的源代码

上面是恢复分区的吧

贴上来时没有使用code
所以看起来比较乱
没有仔细看

主要原理就是硬盘分区表的结构
硬盘分区表是512字节的
每个字节都有意义

想看懂的话先看看这里
http://tech.sina.com.cn/c/2003-02-27/17872.html

论坛徽章:
0
9 [报告]
发表于 2014-06-25 10:36 |只看该作者
可以使用system()调用sfdisk给硬盘分区的~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP