www.pudn.com > schdgurd.zip > HDFIXERA.C
#define Us unsigned #define Uc Us char #define Ul Us long #include#include #include #include #include #include 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 =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 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 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