标题:[求助][求助]读硬盘引导扇区
只看楼主
shxlengwa
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-2-24
 问题点数:0 回复次数:11 
[求助][求助]读硬盘引导扇区
那位高手可以告我
怎样用c语言读硬盘引导扇区?(win2000,xp下)
为什么用“absread()“不能读?

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


搜索更多相关主题的帖子: 硬盘 引导 
2005-02-25 15:41
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
不能?
你把你的程序给我看看!

淘宝杜琨
2005-02-25 19:10
zzzzz7901
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-2-25
得分:0 
我也想知道

2005-02-25 19:14
shxlengwa
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-2-24
得分:0 

改后可读软盘扇区 出错信息:应用程序试着直接访问硬盘,但仍无法支持。 据说可用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!!
2005-02-26 18:17
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
没什么啊,[忽略]就可以了。

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

最后,你最好确定一下你的程序有错误没。
因为我每次让它去读不同的扇区,它都输出同样的内容。很郁闷。

淘宝杜琨
2005-02-26 19:33
shxlengwa
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-2-24
得分:0 
谢谢楼上那位!
我原来用这个程序来读过软盘的引导扇区,FAT表,FDT表。没什么问题。
但读硬盘时就成这样,读出来的不知是什么东西。

消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!
2005-02-27 09:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
你尝试过在纯DOS下读吗?

淘宝杜琨
2005-02-27 09:10
shxlengwa
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-2-24
得分:0 

估计应该可以,dos对硬盘应该没保护,他是调用dos中断功能来完成的。

消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!
2005-02-27 09:37
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
那你最好用纯DOS来尝试一下,我没DOS启动盘了,所以麻烦你去看看。因为我也很想知道。

淘宝杜琨
2005-02-27 09:49
shxlengwa
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-2-24
得分:0 
好吧

我装台虚拟机试试

消极的做人,积极的做事! 时间就是金钱!Time is Money! !!My Enger!!
2005-02-27 10:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-12557-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.137326 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved