LOCKD.C
上传用户:petreluo
上传日期:2007-01-06
资源大小:7k
文件大小:3k
源码类别:

磁盘编程

开发平台:

Others

  1. #include<stdio.h>
  2. #include<bios.h>
  3. int main()
  4. {
  5.  unsigned char buf[512],part[512],temp[512],k;
  6.  int i,flag,lock=0,wrong=0;
  7.  printf("Babysoft  (R) Logic Driver D: Locker-II version 1.0n");
  8.  printf("Copyright (C) 1997.11 LiuYaDing,Babysoft Corp.nn");
  9.  if(biosdisk(0x02,0x80,0,0,1,1,buf))
  10.  {
  11.    printf("Read Master Boot Sector error!an");
  12.    exit(0);
  13.  }
  14.  if(biosdisk(0x02,0x80,0,0,14,1,part)||biosdisk(0x02,0x80,0,0,14,1,temp))
  15.  {
  16.    printf("Read Backup Info error!an");
  17.    exit(0);
  18.  }
  19.  if((buf[0x19E]=='B')&&(buf[0x19F]=='a')&&(buf[0x1A0]=='b')&&(buf[0x1A1]=='y')&&(buf[0x1A2]=='s')&&(buf[0x1A3]=='o')&&(buf[0x1A4]=='f')&&(buf[0x1A5]=='t'))lock=1;
  20.  if(part[0x1BE]==0x10&&part[0x1BF]==0x11)flag=1;
  21.  else flag=0;
  22.  for(i=0;i<16;i++)
  23.  {
  24.   if(temp[i]!=buf[0x1BE+i])wrong=1;
  25.  }
  26.  switch(lock)
  27.  {
  28.   case 1:
  29.        if(wrong)
  30.        {
  31. printf("Backup Info was destroyed by Virus or other programs!an");
  32.         printf("Use HDMBG.EXE to restore Partition.n");
  33.         exit(0);
  34.        }
  35.        if(flag==1)
  36.        {
  37.         printf("Logic Driver D: has been locked before.n"); 
  38.         printf("Unlock it?(Y/N)");
  39.         k=getch();
  40.         k=k|0x20;
  41.         if(k=='y')
  42.         {
  43.          part[0x1BE]=0x00;part[0x1BF]=0x00;
  44.  for(i=0;i<48;i++)
  45.  {
  46.   if(part[i+16]!=0x00)buf[0x1CE+i]=part[16+i];
  47.  }
  48.  if(biosdisk(0x03,0x80,0,0,1,1,buf)||biosdisk(0x03,0x80,0,0,14,1,part))
  49.  {
  50.   printf("nUnlock Driver D: error!an");
  51.   exit(0);
  52.  }
  53.  printf("nUnlock Driver D: ok.n");
  54.  break;
  55. }
  56. else return 0;
  57.        }
  58.        if(flag==0)
  59.        {
  60. part[0x1BE]=0x10;part[0x1BF]=0x11;
  61. for(i=0;i<48;i++)buf[0x1CE+i]=0;
  62. if(biosdisk(0x03,0x80,0,0,1,1,buf)||biosdisk(0x03,0x80,0,0,14,1,part))
  63. {
  64.  printf("Lock Driver D: failed!an");
  65.  exit(0);
  66. }
  67. printf("Locked Driver D: ok.n");
  68. break;
  69.        }
  70.   case 0:
  71.        printf("Are you use Locker-II on this Hard Disk first?na");
  72.        printf("If yes.Please use HDMBG.EXE to Backup Master Boot Sector!n");
  73.        printf("nAfter do it...n");
  74.        printf("If you can't unlock Driver D:,HDMBG.EXE can help you to restore Partition.n");
  75.        printf("nQuit and Use HDMBG.EXE to Backup?(Y/N)");
  76.        k=getch();k=k|0x20;
  77.        if(k=='y'){exit(0);}
  78.        buf[0x19E]='B';buf[0x19F]='a';buf[0x1A0]='b';buf[0x1A1]='y';
  79.        buf[0x1A2]='s';buf[0x1A3]='o';buf[0x1A4]='f';buf[0x1A5]='t';
  80.        for(i=0;i<512;i++)
  81.        {part[i]=0x00;}
  82.        part[0x1BE]=0x10;part[0x1BF]=0x11;
  83.        for(i=0;i<16;i++)
  84.        {
  85. if(buf[0x1BE+i]!=0x00)part[i]=buf[0x1BE+i];
  86.        }
  87.        for(i=0;i<48;i++)
  88.        {
  89. if(buf[0x1CE+i]!=0x00)part[16+i]=buf[0x1CE+i];
  90. buf[0x1CE+i]=0x00;
  91.        }
  92.        if(biosdisk(0x03,0x80,0,0,1,1,buf)||biosdisk(0x03,0x80,0,0,14,1,part))
  93.        {
  94. printf("nLock Driver D: failed!an");
  95. exit(0);
  96.        }
  97.        printf("nLocked Driver D: ok.n");
  98.        break;
  99.   }
  100.   printf("Reboot system to enable the change?(Y/N)");
  101.   k=getch();k=k|0x20;
  102.   if(k=='y')
  103.   {
  104.    asm mov ax,0xf000
  105.    asm push ax
  106.    asm mov ax,0xfff0
  107.    asm push ax
  108.    asm retf
  109.   }
  110.   return 0;
  111. }