当前位置: 代码迷 >> C语言 >> [求助][求助]读硬盘引导扇区
  详细解决方案

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

热度:443   发布时间:2005-02-25 15:41:00.0
[求助][求助]读硬盘引导扇区
那位高手可以告我
怎样用c语言读硬盘引导扇区?(win2000,xp下)
为什么用“absread()“不能读?

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


搜索更多相关的解决方案: 硬盘  引导  

----------------解决方案--------------------------------------------------------
不能?
你把你的程序给我看看!
----------------解决方案--------------------------------------------------------
我也想知道
----------------解决方案--------------------------------------------------------

改后可读软盘扇区 出错信息:应用程序试着直接访问硬盘,但仍无法支持。 据说可用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()*/


----------------解决方案--------------------------------------------------------
没什么啊,[忽略]就可以了。

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

最后,你最好确定一下你的程序有错误没。
因为我每次让它去读不同的扇区,它都输出同样的内容。很郁闷。
----------------解决方案--------------------------------------------------------
谢谢楼上那位!
我原来用这个程序来读过软盘的引导扇区,FAT表,FDT表。没什么问题。
但读硬盘时就成这样,读出来的不知是什么东西。
----------------解决方案--------------------------------------------------------
你尝试过在纯DOS下读吗?
----------------解决方案--------------------------------------------------------

估计应该可以,dos对硬盘应该没保护,他是调用dos中断功能来完成的。
----------------解决方案--------------------------------------------------------
那你最好用纯DOS来尝试一下,我没DOS启动盘了,所以麻烦你去看看。因为我也很想知道。
----------------解决方案--------------------------------------------------------
好吧

我装台虚拟机试试
----------------解决方案--------------------------------------------------------
  相关解决方案