编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛  
全能 ASP / PHP / ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
 12 12
发新话题
打印

[求助][求助]读硬盘引导扇区

[求助][求助]读硬盘引导扇区

那位高手可以告我
怎样用c语言读硬盘引导扇区?(win2000,xp下)
为什么用“absread()“不能读?

[此贴子已经被作者于2005-2-25 16:13:39编辑过]


TOP

不能?
你把你的程序给我看看!
泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存

TOP

我也想知道

TOP

改后可读软盘扇区 出错信息:应用程序试着直接访问硬盘,但仍无法支持。 据说可用win api函数直接实现,但我不知道是什么函数。 #include<stdio.h> #include<stdlib.h> #include<dos.h> #include<ctype.h> const int num=512; int Maxnum; FILE *fp; unsigned char *buf;

void ReadDisk(int nsects,int isect)/*nsects:要读的扇区数;isect:其实逻辑扇区号。*/ {

unsigned int i,j;

/*absread(drive,number of sects to read,start sect number,buf)*/ /*use INT 25h,Read disk sects! */ absread(2,nsects,isect,buf);

/*将结果写入文件*/ for(i=0;i<Maxnum;i+=16) { /*for(j),print by ascii */ for(j=0;j<16;j++) { fprintf(fp,"%02x",buf[i+j]); fprintf(fp," "); } fprintf(fp," ");

/*for(j),print by char*/ for(j=0;j<16;j++) { if(isprint(buf[i+j])) fprintf(fp,"%c",buf[i+j]); else fprintf(fp,"."); } fprintf(fp,"\n");

}/*End for(i)*/

}/*readdisk()*/

int main() { char p[512],ch; int k;

fp=fopen("out.txt","w+"); /*Creat file "out.txt" and write in.*/ if(fp==0) { printf("File open error!"); exit(0); }

fprintf(fp,"\n/*--------------------------Boot引导纪录----------------------------*/\n\n"); /*Boot引导纪录: One sect!*/ Maxnum=num; buf=malloc(Maxnum); ReadDisk(1,0); return 0; }/*main()*/

消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!

TOP

没什么啊,[忽略]就可以了。

还有,你打开文件和写文件操作竟然不在同一个函数下。这个不良习惯会毁了你的整个程序。如果你用的不是absread而是abswrite那你的硬盘很可能就完蛋了。

最后,你最好确定一下你的程序有错误没。
因为我每次让它去读不同的扇区,它都输出同样的内容。很郁闷。
泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存

TOP

谢谢楼上那位!
我原来用这个程序来读过软盘的引导扇区,FAT表,FDT表。没什么问题。
但读硬盘时就成这样,读出来的不知是什么东西。
消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!

TOP

你尝试过在纯DOS下读吗?
泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存

TOP


估计应该可以,dos对硬盘应该没保护,他是调用dos中断功能来完成的。
消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!

TOP

那你最好用纯DOS来尝试一下,我没DOS启动盘了,所以麻烦你去看看。因为我也很想知道。
泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存

TOP

好吧

我装台虚拟机试试
消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!

TOP

 12 12
发新话题