📄 srpd.cpp
字号:
}
else
return 0;
}
else
return 0;
}
else
{
if(read_sector(0x42,hdd,dpt[p_no-1].s_position,buff))
{
if(read_sector(0x42,hdd,dpt[p_no-2].s_position,buff1))
{
if(dpt[p_no-2].flag!='E')
{
for(i=462;i<478;i++)
buff1[i]=buff[i];
if(read_sector(0x43,hdd,dpt[p_no-2].s_position,buff1))
{
CHANGE=1;
return 1;
}
else
return 0;
}
else
{
for(i=446;i<462;i++)
buff1[i]=buff1[i+16];
if(read_sector(0x43,hdd,dpt[p_no-1].s_position,buff1))
{
CHANGE=1;
return 1;
}
else
return 0;
}
}
else
return 0;
}
else
return 0;
}
}
else
{
if(dpt[p_no-1].flag=='E')
if(PNO_L>0)
return 2;
if(read_sector(0x42,hdd,0,buff))
{
for(i=446;i<=494;i+=16)
{
t=DWORD(buff[i+8]);
t=DWORD(buff[i+9])*0x100+t;
t=DWORD(buff[i+10])*0x10000+t;
t=DWORD(buff[i+11])*0x1000000+t;
if(dpt[p_no-1].s_position==t)
{
for(j=i;j<510;j++)
buff[j]=buff[j+16];
for(j=446+(PNO_M-1)*16;j<510;j++)
buff[j]=0x0;
break;
}
}
if(read_sector(0x43,hdd,0,buff))
{
CHANGE=1;
return 1;
}
else
return 0;
}
else
return 0;
}
}
/*cmd为1时创建主分区,为2时创建扩展分区,为3时创建逻辑分区,成功返回1,失败返回0,返回2时为cmd值错误,若为3时写DBR错误*/
int create_p(BYTE cmd,BYTE hdd,BYTE p_no,DWORD size,DWORD position)
{
BYTE buff[512]="";
BYTE buff1[16]="";
DWORD t;
int i,j;
void notice(char *s);
t=size/255/63;
size=t*255*63;
if(cmd==1||cmd==2)
{
if(read_sector(0x42,hdd,0,buff))
{
if(buff[450]==0)
for(i=0;i<512;i++)
buff[i]=MBR[i];
for(i=446;i<=494;i+=16)
{
t=DWORD(buff[i+8]);
t=DWORD(buff[i+9])*0x100+t;
t=DWORD(buff[i+10])*0x10000+t;
t=DWORD(buff[i+11])*0x1000000+t;
if(t>position||t==0)
break;
}
for(j=509;j-16>=i;j--)
buff[j]=buff[j-16];
buff[i]=0x0;
if(i==446)
{
buff[i+1]=0x01;
size-=0x3f;
}
else
buff[i+1]=0x00;
if(position/63/255<256)
buff[i+2]=0x01;
else if(position/63/255<512)
buff[i+2]=0x41;
else if(position/63/255<768)
buff[i+2]=0x81;
else
buff[i+2]=0xc1;
if(position/63/255<256)
buff[i+3]=position/63/255;
else if(position/63/255<512)
buff[i+3]=position/63/255-256;
else if(position/63/255<768)
buff[i+3]=position/63/255-512;
else if(position/63/255<1024)
buff[i+3]=position/63/255-768;
else
buff[i+3]=0xff;
if(i==446)
if(cmd==2)
if(position==0)
{
buff[i+3]=1;
buff[i+1]=0;
position+=255*63;
size-=255*63;
}
if(cmd==1)
buff[i+4]=0x0c;
else
buff[i+4]=0x0f;
t=size+position;
buff[i+5]=0xfe;
if(t/63/255<256)
buff[i+6]=0x3f;
else if(t/63/255<512)
buff[i+6]=0x7f;
else if(t/63/255<768)
buff[i+6]=0xbf;
else
buff[i+6]=0xff;
if(t/63/255<256)
buff[i+7]=t/63/255;
else if(t/63/255<512)
buff[i+7]=t/63/255-256;
else if(t/63/255<768)
buff[i+7]=t/63/255-512;
else if(t/63/255<1024)
buff[i+7]=t/63/255-768;
else
buff[i+7]=0xff;
if(position!=0)
{
buff[i+8]=position%0x100;
buff[i+9]=position/0x100%0x100;
buff[i+10]=position/0x10000%0x100;
buff[i+11]=position/0x1000000;
}
else
{
buff[i+8]=0x3f;
buff[i+9]=0;
buff[i+10]=0;
buff[i+11]=0;
}
buff[i+12]=size%0x100;
buff[i+13]=size/0x100%0x100;
buff[i+14]=size/0x10000%0x100;
buff[i+15]=size/0x1000000;
if(read_sector(0x43,hdd,0,buff))
{
for(j=0;j<512;j++)
buff[j]=0;
if(i==446)
if(read_sector(0x43,hdd,position+0x3f,buff))
if(read_sector(0x43,hdd,position+0x3f+6,buff))
{
CHANGE=1;
return 1;
}
else
return 3;
else
if(read_sector(0x43,hdd,position,buff))
if(read_sector(0x43,hdd,position+6,buff))
{
CHANGE=1;
return 1;
}
else
return 3;
}
else
return 0;
}
else
return 0;
}
else if(cmd==3)
{
if(dpt[p_no-2].flag=='E')
{
if(PNO_L==0)
for(i=0;i<512;i++)
buff[i]=0;
else
if(read_sector(0x42,hdd,dpt[p_no-1].s_position,buff)==0)
return 0;
for(i=446;i<462;i++)
buff[i+16]=buff[i];
i=446;
buff[i+1]=0x01;
size-=0x3f;
if(position/63/255<256)
buff[i+2]=0x01;
else if(position/63/255<512)
buff[i+2]=0x41;
else if(position/63/255<768)
buff[i+2]=0x81;
else
buff[i+2]=0xc1;
if(position/63/255<256)
buff[i+3]=position/63/255;
else if(position/63/255<512)
buff[i+3]=position/63/255-256;
else if(position/63/255<768)
buff[i+3]=position/63/255-512;
else if(position/63/255<1024)
buff[i+3]=position/63/255-768;
else
buff[i+3]=0xff;
buff[i+4]=0x0c;
t=size+position+0x3f;
buff[i+5]=0xfe;
if(t/63/255<256)
buff[i+6]=0x3f;
else if(t/63/255<512)
buff[i+6]=0x7f;
else if(t/63/255<768)
buff[i+6]=0xbf;
else
buff[i+6]=0xff;
if(t/63/255<256)
buff[i+7]=t/63/255;
else if(t/63/255<512)
buff[i+7]=t/63/255-256;
else if(t/63/255<768)
buff[i+7]=t/63/255-512;
else if(t/63/255<1024)
buff[i+7]=t/63/255-768;
else
buff[i+7]=0xff;
buff[i+8]=0x3f;
buff[i+9]=0;
buff[i+10]=0;
buff[i+11]=0;
buff[i+12]=size%0x100;
buff[i+13]=size/0x100%0x100;
buff[i+14]=size/0x10000%0x100;
buff[i+15]=size/0x1000000;
buff[510]=0x55;
buff[511]=0xaa;
if(read_sector(0x43,hdd,position,buff))
{
for(i=0;i<512;i++)
buff[i]=0x0;
if(read_sector(0x43,hdd,position+0x3f,buff))
if(read_sector(0x43,hdd,position+0x3f+6,buff))
{
CHANGE=1;
return 1;
}
else
return 3;
}
else
return 0;
}
else
{
if(read_sector(0x42,hdd,dpt[p_no-2].s_position,buff))
{
for(i=0;i<16;i++)
buff1[i]=buff[462+i];
buff[462]=0;
buff[463]=0x0;
if(position/63/255<256)
buff[464]=0x01;
else if(position/63/255<512)
buff[464]=0x41;
else if(position/63/255<768)
buff[464]=0x81;
else
buff[464]=0xc1;
if(position/63/255<256)
buff[465]=position/63/255;
else if(position/63/255<512)
buff[465]=position/63/255-256;
else if(position/63/255<768)
buff[465]=position/63/255-512;
else if(position/63/255<1024)
buff[465]=position/63/255-768;
else
buff[465]=0xff;
buff[466]=0x05;
buff[467]=0xfe;
t=position+size;
if(t/63/255<256)
buff[468]=0x3f;
else if(t/63/255<512)
buff[468]=0x7f;
else if(t/63/255<768)
buff[468]=0xbf;
else
buff[468]=0xff;
if(t/63/255<256)
buff[469]=t/63/255;
else if(t/63/255<512)
buff[469]=t/63/255-256;
else if(t/63/255<768)
buff[469]=t/63/255-512;
else if(t/63/255<1024)
buff[469]=t/63/255-768;
else
buff[469]=0xff;
t=position-M_SECTORS;
buff[470]=t%0x100;
buff[471]=t/0x100%0x100;
buff[472]=t/0x10000%0x100;
buff[473]=t/0x1000000;
buff[474]=size%0x100;
buff[475]=size/0x100%0x100;
buff[476]=size/0x10000%0x100;
buff[477]=size/0x1000000;
if(read_sector(0x43,hdd,dpt[p_no-2].s_position,buff))
{
for(i=446;i<462;i++)
buff[i]=buff[i+16];
for(i=0;i<16;i++)
buff[462+i]=buff1[i];
buff[447]=0x01;
buff[448]=0xc1;
buff[450]=0x0c;
buff[454]=0x3f;
buff[455]=0x0;
buff[456]=0x0;
buff[457]=0x0;
size-=0x3f;
buff[458]=size%0x100;
buff[459]=size/0x100%0x100;
buff[460]=size/0x10000%0x100;
buff[461]=size/0x1000000;
buff[510]=0x55;
buff[511]=0xaa;
if(read_sector(0x43,hdd,position,buff))
{
for(i=0;i<512;i++)
buff[i]=0x0;
if(read_sector(0x43,hdd,position+0x3f,buff))
if(read_sector(0x43,hdd,position+0x3f+6,buff))
{
CHANGE=1;
return 1;
}
else
return 3;/*DBR写错误*/
}
else
return 0;
}
else
return 0;
}
else
return 0;
}
}
else
return 2;/*cmd值错误*/
}
int back_dpt(BYTE cmd,BYTE hdd)/*备份和恢复DPT,cmd为1时备份DPT,为2时恢复DPT,成功返回1,失败返回0,没有备份DPT返回2*/
{
BYTE buff[512]="",buff1[512]="";
int i,j,k,lp,tp;
DWORD t,t1,t2,m_sectors;
if(cmd==1)
{
for(i=0,j=16;i<P_TOTAL;i++,j+=20)
{
if(dpt[i].flag==0x00)
continue;
buff[j]=dpt[i].bflag;
buff[j+1]=dpt[i].head;
buff[j+2]=dpt[i].sector;
buff[j+3]=dpt[i].cylinder;
buff[j+4]=dpt[i].pflag;
buff[j+5]=dpt[i].ehead;
buff[j+6]=dpt[i].esector;
buff[j+7]=dpt[i].ecylinder;
buff[j+8]=dpt[i].ssectors%0x100;
buff[j+9]=dpt[i].ssectors/0x100%0x100;
buff[j+10]=dpt[i].ssectors/0x10000%0x100;
buff[j+11]=dpt[i].ssectors/0x1000000;
buff[j+12]=dpt[i].sectors%0x100;
buff[j+13]=dpt[i].sectors/0x100%0x100;
buff[j+14]=dpt[i].sectors/0x10000%0x100;
buff[j+15]=dpt[i].sectors/0x1000000;
buff[j+16]=dpt[i].s_position%0x100;
buff[j+17]=dpt[i].s_position/0x100%0x100;
buff[j+18]=dpt[i].s_position/0x10000%0x100;
buff[j+19]=dpt[i].s_position/0x1000000;
buff[0]++;
if(dpt[i].flag=='P')
buff[2]++;
else if(dpt[i].flag=='L')
buff[4]++;
}
if(read_sector(0x43,hdd,0x12,buff))
return 1;
else
return 0;
}
else if(cmd==2)
{
if(read_sector(0x42,hdd,0x12,buff))
{
if(buff[0]!=0)
{
tp=buff[0];
lp=buff[4];
for(i=16;i<16+tp*20;i+=20)
if(buff[i+4]==0x0f)
break;
t=DWORD(buff[i+8]);
t=DWORD(buff[i+9])*0x100+t;
t=DWORD(buff[i+10])*0x10000+t;
t=DWORD(buff[i+11])*0x1000000+t;
m_sectors=t;
for(j=1;j<=lp;j++)
{ t1=t;
t=DWORD(buff[j*20+i+16]);
t=DWORD(buff[j*20+i+17])*0x100+t;
t=DWORD(buff[j*20+i+18])*0x10000+t;
t=DWORD(buff[j*20+i+19])*0x1000000+t;
if(j==1)
{
if(t==m_sectors)
{
for(k=0;k<16;k++)
{
buff1[446+k]=buff[j*20+i+k];
}
if(read_sector(0x43,hdd,t,buff1)==0)
return 0;
}
}
else
{
if(read_sector(0x42,hdd,t1,buff1))
{
for(k=0;k<16;k++)
buff1[462+k]=buff[j*20+i+k];
t2=t-m_sectors;
buff1[463]=0x00;
buff1[466]=0x05;
buff1[470]=t2%0x100;
buff1[471]=t2/0x100%0x100;
buff1[472]=t2/0x10000%0x100;
buff1[473]=t2/0x1000000;
t2=DWORD(buff[j*20+i+12]);
t2=DWORD(buff[j*20+i+13])*0x100+t2;
t2=DWORD(buff[j*20+i+14])*0x10000+t2;
t2=DWORD(buff[j*20+i+15])*0x1000000+t2;
t2+=0x3f;
buff1[474]=t2%0x100;
buff1[475]=t2/0x100%0x100;
buff1[476]=t2/0x10000%0x100;
buff1[477]=t2/0x1000000;
buff1[510]=0x55;
buff1[511]=0xaa;
if(read_sector(0x43,hdd,t1,buff1))
{
for(k=0;k<512;k++)
buff1[k]=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -