#include <stdio.h>
#include <bios.h> #define READ 2
#define WRITE 3void ShowHelp()
{
printf("\nHD SECTOR BACKUP & RESTORE TOOLS by CRSHEN\n\n\
Usage: hdsect.exe drive head track sector filename parameter\n\
drive: 1=first HD 2=second HD and so on\n\
head track sector MUST be integer\n\
parameter: /b means backup /r means restore, *case sensitive*\n"

;
}void main(int argc,char *argv)
{
int drive=0x80,head=0,track=0,sector=1,nsects=1;
unsigned char buf;
FILE *fp; drive=0x80+atoi(argv)-1;
head=atoi(argv);
track=atoi(argv);
sector=atoi(argv); if (argc!=7)
{
ShowHelp();
exit(2);
}
if (strcmp(argv,"/b"

==0)
{
if (biosdisk(READ,drive,head,track,sector,nsects,buf))
{
printf("Failed to read from sector !\n"

;
exit(1);
}
if ((fp=fopen(argv,"wb"

)!=NULL)
{
fwrite(buf,512,1,fp);
fclose(fp);
printf("Backup sector to file %s done !\n",argv);
exit(0);
}
else
{
printf("Open File %s Failed !\n",argv);
exit(1);
}
}
if (strcmp(argv,"/r"

==0)
{
if ((fp=fopen(argv,"rb"

)!=NULL)
{
fread(buf,512,1,fp);
fclose(fp);
}
else
{
printf("Open File %s Failed !\n",argv);
exit(1);
}
if (biosdisk(WRITE,drive,head,track,sector,nsects,buf))
{
printf("Failed to write to sector !\n"

;
exit(1);
}
else
{
printf("Restore sector from file %s done !",argv);
exit(0);
}
}
}
匆忙中写的,问题还有,但实在忙,这两天没时间去完善了,大家有兴趣的话修改一下吧:
1. 对参数的检测:如果最后一个参数错误,没有任何提示;
2. 基于int 13,不支持8.4G以后的扇区,一定要的话,可使用扩展int 13,自己改吧;
3. 每次只读一个扇区,但留了接口,修改时注意要动态分配内存;
4. 为了方便批处理中使用,程序均采用exit()函数结束。