⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hdfixera.bak

📁 硬盘卫士
💻 BAK
字号:
#define Us unsigned
#define Uc Us char
#define Ul Us long
#include<dos.h>
#include<bios.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
Uc Sector1[512]=
      { 0xFA,0x33,0xC0,0x8E,0xD0,0xBC,0x00,0x7C,0x8B,0xF4,0x50,0x07,
	0x50,0x1F,0xFB,0xFC,0xBF,0x00,0x06,0xB9,0x00,0x01,0xF2,0xA5,
	0xEA,0x1D,0x06,0x00,0x00,0xBE,0xBE,0x07,0xB3,0x04,0x80,0x3C,
	0x80,0x74,0x0E,0x80,0x3C,0x00,0x75,0x1C,0x83,0xC6,0x10,0xFE,
	0xCB,0x75,0xEF,0xCD,0x18,0x8B,0x14,0x8B,0x4C,0x02,0x8B,0xEE,
	0x83,0xC6,0x10,0xFE,0xCB,0x74,0x1A,0x80,0x3C,0x00,0x74,0xF4,
	0xBE,0x8B,0x06,0xAC,0x3C,0x00,0x74,0x0B,0x56,0xBB,0x07,0x00,
	0xB4,0x0E,0xCD,0x10,0x5E,0xEB,0xF0,0xEB,0xFE,0xBF,0x05,0x00,
	0xBB,0x00,0x7C,0xB8,0x01,0x02,0x57,0xCD,0x13,0x5F,0x75,0x0C,
	0x33,0xC0,0xCD,0x13,0x4F,0x75,0xED,0xBE,0xA3,0x06,0xEB,0xD3,
	0xBE,0xC2,0x06,0xBF,0xFE,0x7D,0x81,0x3D,0x55,0xAA,0x75,0xC7,
	0x8B,0xF5,0xEA,0x00,0x7C,0x00,0x00,0x49,0x6E,0x76,0x61,0x6C,
	0x69,0x64,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6F,0x6E,
	0x20,0x74,0x61,0x62,0x6C,0x65,0x00,0x45,0x72,0x72,0x6F,0x72,
	0x20,0x6C,0x6F,0x61,0x64,0x69,0x6E,0x67,0x20,0x6F,0x70,0x65,
	0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x73,0x79,0x73,0x74,0x65,
	0x6D,0x00,0x4D,0x69,0x73,0x73,0x69,0x6E,0x67,0x20,0x6F,0x70,
	0x65,0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x73,0x79,0x73,0x74,
	0x65,0x6D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x42,0x61,0x62,0x79,0x73,0x6F,0x66,0x74,0x20,0x48,
	0x44,0x46,0x69,0x78,0x65,0x72,0x20,0x76,0x31,0x2E,0x31,0x61,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x80,0x01,0x01,0x00,0x06,0x0F,0xBE,0x6B,0x3E,0x00,
	0x00,0x00,0x42,0x62,0x09,0x00,0x00,0x00,0x81,0x6C,0x05,0x0F,
	0xFE,0x45,0x80,0x62,0x09,0x00,0xC0,0x4C,0x03,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA};
Uc Extp[512]=
      { 0x00,0x00,0x00,0x00,0x00,0x44,0x69,0x73,0x6B,0x20,0x44,0x6F,
	0x63,0x20,0x49,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x42,0x61,0x62,0x79,0x73,0x6F,0x66,0x74,0x20,0x48,
	0x44,0x46,0x69,0x78,0x65,0x72,0x20,0x76,0x31,0x2E,0x31,0x61,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x01,0x81,0x6C,0x06,0x0F,0xFE,0x45,0x3E,0x00,
	0x00,0x00,0x82,0x4C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA};
Us Cyl,Head,Sct,drv=0x80,N,Cy[4];
FILE *fp;
struct HSC
{Uc hd;
 Uc sc;
 Uc cy;
}last;
struct PartitionTable
{
 Uc Flg;
 struct HSC bgn;
 Uc Tp;
 struct HSC end;
 Ul id,sz;
}pt[16][2];
struct DiskBPB
{
 Us bytespersect;
 Uc sectperclust;
 Us reservedsect;
 Uc numberofFAT;
 Us itemsofroot;
 Us totalsect;
 Uc media;
 Us sectperFAT;
 Us sectperCyl;
 Us Head;
 Us hiddensect;
}db[16];
long HSCtold(Us,Us,Us);
long hsctoid(struct HSC *s);
struct HSC ldtoHSC(long);
void getenddata();
void searchBOOT(int);
void getbiosHSC(int);
void showPTable(int);
void showBPB(int);
void copyright();
void main()
{
 int i;
 char ft;
 Us *mb,*cp;
 clrscr();
 copyright();
 getbiosHSC(0x80);
 searchBOOT(0x80);
 showPTable(0x80);
 printf("\n");
 getbiosHSC(0x81);
 searchBOOT(0x81);
 showPTable(0x81);
}
void getbiosHSC(int drv)
{
 Uc bff[8];
 if(biosdisk(8,drv,1,1,1,1,bff)){printf("\a\n The No.%d Physical Hard Disk doesn't exist or Read error!\n",(drv-127));exit(1);}
 Head=bff[3]+1;
 Sct=bff[0]%64;
 Cyl=bff[0]/64*256+bff[1]+2;
}
void searchBOOT(int drv)
{
 Us cyl,i=0;
 char bff[512],dos[9];
 if(biosdisk(2,drv,1,0,1,1,bff))
 {
  printf("\a\n Searching for DOS Boot sector failed!\n");
  exit(1);
 }
 printf("\n Fixing the No.%d Physical Hard Disk... ",(drv-127));
 printf("\n Searching for DOS Boot Sector...\n");
 printf("\n CylNum head sector cylinder \n");
 for(cyl=0;cyl<Cyl;cyl++)
 {
  if(biosdisk(2,drv,1,cyl,1,1,bff))
  {printf("\a\n Searching for Boot sector failed!\n");exit(0);}
  if((Us)bff[510]==0x55&&(Uc)bff[511]==0xaa)
  {
   db[i]=*(struct DiskBPB *)(bff+11);
   printf("%7d",cyl);
   pt[i][0].bgn=ldtoHSC(HSCtold(1,1,cyl));
   printf("  %3x %6x %8x\n",pt[i][0].bgn.hd,pt[i][0].bgn.sc,pt[i][0].bgn.cy);
   i++;
   if(i>=2)Cy[i-2]=cyl;
  }
 }
 N=i;
 /*if(N==0){printf("\n\a Searching for DOS Boot sector failed!\n");exit(0);}*/
 showBPB(N);
}
void showPTable(int drv)
{
 int i,j,k;
 char ch;
 getenddata();
 printf("\n Cyl=%d  Head=%d  Sect=%d  Partiton=%d\n",Cyl,Head,Sct,N);
 printf("\n Partition Table Data:\n");
 for(i=0;i<N;i++)
 {
  for(j=0;j<2;j++)
     if(j==0||i<N-1)
     {
      printf(" ");
      for(k=0;k<16;k++)printf("%2x ",((Uc *)&pt[i][j])[k]);
      if(j==0)printf(" Sector=%6lu Size=%3u MB",(pt[i][j].sz+1),(pt[i][j].sz+1024)/2048);
      printf("\n");
     }
     if(i<N-1)printf("\n");
 }
 printf("\n Are you sure this is the right Partition Info?(Y/N)");
 ch=getche();
 if(ch=='Y'||ch=='y')
 {
  for(i=0;i<32;i++)
  {
   Sector1[0x1BE+i]=((Uc *)&pt[0][0])[i];
  }
  if(biosdisk(0x03,drv,0,0,1,1,Sector1))
  {printf("\n\a Fixed Hard Disk Partition error!\n");exit(0);}
  for(j=1;j<N;j++)
  {
    if(j<N-1)
    {
      for(i=0;i<32;i++)
      {
	Extp[0x1BE+i]=((Uc *)&pt[j][0])[i];
      }
    }
    else
    {
      for(i=0;i<16;i++)
      {
	Extp[0x1BE+i]=((Uc *)&pt[j][0])[i];
      }
    }
    if(biosdisk(0x03,drv,0,Cy[j-1],1,1,Extp))
    {printf("\n\a Fixed Hard Disk Partition error!\n");exit(0);}
  }
  printf("\n Fixed Hard Disk Partition ok.");
 }
}
void getenddata()
{
 struct HSC hsc;
 long id1,id0,ext;
 int i,j;
 last=ldtoHSC(HSCtold(Head-1,Sct,Cyl-2));
 for(i=0;i<N;i++)
 {
  id0=HSCtold(pt[i][0].bgn.hd-1,pt[i][0].bgn.sc,pt[i][0].bgn.cy);
  if(i<N-1)
  {
   id1=HSCtold(pt[i+1][0].bgn.hd-1,pt[i+1][0].bgn.sc,pt[i+1][0].bgn.cy);
   pt[i][0].end=ldtoHSC(id1-1);
  }
  else{
       id1=HSCtold(Head-1,Sct,Cyl-2)+1;
       pt[i][0].end=last;
      }
  if(i==0)pt[i][0].Flg=0x80;else pt[i][0].Flg=0;
  pt[i][0].id=Sct;pt[i][0].sz=id1-id0-Sct;
  if(pt[i][0].sz>65535)pt[i][0].Tp=6;
  else if((Ul)db[i].bytespersect*db[i].sectperFAT*db[i].sectperclust>=2*((Ul)pt[i][0].sz-1-(Ul)db[i].numberofFAT*db[i].sectperFAT-(Ul)db[i].itemsofroot*32/db[i].bytespersect)+4)
	  pt[i][0].Tp=4;
       else pt[i][0].Tp=1;
 }
 ext=pt[0][0].sz+pt[0][0].id;
 for(i=0;i<N-1;i++)
 {
  pt[i][1].Tp=5;
  pt[i][1].bgn=pt[i+1][0].bgn;
  pt[i][1].bgn.hd=pt[i+1][0].bgn.hd-1;
  if(i==0)pt[i][1].end=last;
  else pt[i][1].end=pt[i+1][0].end;
  if(i==0)pt[i][1].id=ext;
  else pt[i][1].id=hsctoid((struct HSC *)&(pt[i+1][0].bgn))-ext-Sct;
  if(i==0)pt[i][1].sz=hsctoid(&last)-hsctoid((struct HSC *)&(pt[0][0].end));
  else pt[i][1].sz=hsctoid((struct HSC *)&(pt[i][1].end))-hsctoid((struct HSC *)&(pt[i][0].end));
 }
}
long hsctoid(struct HSC *s)
{
 return HSCtold(s->hd,s->sc,s->cy);
}
long HSCtold(Us hd,Us sct,Us cyl)
{
 long id;
 Ul cylinder,sector;
 cylinder=cyl+sct/64*256;sector=sct%64-1;
 id=(long)cylinder*Head*Sct+hd*Sct+sector;
 return id;
}
struct HSC ldtoHSC(long id)
{
 struct HSC hsc;
 Us r,cyl;
 cyl=id/((long)Head*Sct);hsc.cy=cyl%256;
 r=id%((long)Head*Sct);hsc.hd=r/Sct;
 hsc.sc=r%Sct+1+cyl/256*64;
 return hsc;
}
void showBPB(int n)
{
 int i;
 printf("\n Partition number :  ");
 for(i=0;i<n;i++)printf("%4d",i+1);
 printf("\n Sectors per cluster :");
 for(i=0;i<n;i++)printf("%4u",db[i].sectperclust);
 printf("\n Sectors per FAT :     ");
 for(i=0;i<n;i++)printf("%4u",db[i].sectperFAT);
 printf("\n Number of FAT :     ");
 for(i=0;i<n;i++)printf("%4u",db[i].numberofFAT);
 printf("\n Items of root Dir :   ");
 for(i=0;i<n;i++)printf("%4u",db[i].itemsofroot);
 printf("\n Hidden sectors :     ");
 for(i=0;i<n;i++)printf("%4u",db[i].hiddensect);
 printf("\n Reserved sectors :  ");
 for(i=0;i<n;i++)printf("%4u",db[i].reservedsect);
 printf("\n");
}
void copyright()
{
  printf("\n Babysoft  (R) Hard Disk Partition Fixer version 1.1a");
  printf("\n Copyright (C) 1997.12 LiuYaDing,Babysoft Corp.\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -