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

磁盘编程

开发平台:

Others

  1. #include<stdio.h>
  2. #include<dos.h>
  3. #define MemSize *(unsigned far *)0x00400013
  4. void ReadStr(char *str)
  5. {
  6.  unsigned char Plength=1;
  7.  unsigned xx,yy,x;
  8.  union REGS r;
  9.  xx=wherex();yy=wherey();
  10.  x=xx;
  11.  do{
  12.      gotoxy(xx,yy);
  13.      r.h.ah=0;
  14.      int86(0x16,&r,&r);
  15.      if((r.h.ah!=28)&&(r.h.ah!=14)&&(r.h.ah!=1))
  16.      {
  17.       *(str+Plength)=(r.h.al-20)|0x80;
  18.       gotoxy(xx,yy);
  19.       putch('*');
  20.       xx++;Plength++;
  21.      }
  22.      else if(r.h.ah==14)
  23.           {
  24.            xx--;
  25.            if(xx<x)xx=x;
  26.            gotoxy(xx,yy);
  27.            putch(' ');
  28.            if(Plength>1)Plength--;
  29.           }
  30.           else if(r.h.ah==1)Plength=0;
  31.     }while((r.h.ah!=28)&&(r.h.ah!=1)&&(Plength<15));
  32.     *(str+0)=Plength-1;
  33. }
  34. int ReadPass(char *buffer)
  35. {
  36.  union REGS ireg;
  37.  struct SREGS oreg;
  38.  ireg.x.ax=0x0201;
  39.  ireg.x.bx=FP_OFF(buffer);
  40.  ireg.x.cx=0x0006;
  41.  ireg.x.dx=0x0080;
  42.  oreg.es=FP_SEG(buffer);
  43.  int86x(0x50,&ireg,&ireg,&oreg);
  44.  return ireg.h.ah;
  45. }
  46. int WritePass(char *buffer)
  47. {
  48.  union REGS ireg;
  49.  struct SREGS oreg;
  50.  ireg.x.ax=0x0301;
  51.  ireg.x.bx=FP_OFF(buffer);
  52.  ireg.x.cx=0x0006;
  53.  ireg.x.dx=0x0080;
  54.  oreg.es=FP_SEG(buffer);
  55.  int86x(0x50,&ireg,&ireg,&oreg);
  56.  return ireg.h.ah;
  57. }
  58. int CheckPass(char *src,char *dest)
  59. {
  60.  unsigned char Plength,p2;
  61.  Plength=*(src+0);
  62.  p2=*(dest+0);
  63.  if(Plength!=p2)return -1;
  64.  while(Plength>0)
  65.  {
  66.   if(*(src+Plength)!=*(dest+Plength))return -1;
  67.   Plength--;
  68.  }
  69.  return 1;
  70. }
  71. int CopyPass(char *src,char *dest)
  72. {
  73.  char Plength;
  74.  Plength=*(src+0);
  75.  while(Plength>=0)
  76.  {
  77.   *(dest+Plength)=*(src+Plength);
  78.   Plength--;
  79.  }
  80.  return 0;
  81. }
  82. void reboot(void)
  83. {
  84.  void (far *reboot_ptr)(void);
  85.  unsigned int far *i_ptr;
  86.  clrscr();
  87.  i_ptr=MK_FP(0x0040,0x0072);
  88.  *i_ptr=0x1234;
  89.  reboot_ptr=MK_FP(0xF000,0xFFF0);
  90.  reboot_ptr();
  91. }
  92. void copyright()
  93. {
  94.  printf("n Babysoft  (R) Password Changer for Hard Disk Keeper version 1.0");
  95.  printf("n Copyright (C) 1997.12 LiuYaDing,Babysoft Corp.n");
  96. }
  97. void main()
  98. {
  99.  char buffer[512];
  100.  char passwd[16],passwd1[16];
  101.  char *source;
  102.  char key;
  103.  copyright();
  104.  if(MemSize==0x280)
  105.  {
  106.   printf("na Babysoft-HDKeeper Not Installed.n");
  107.   exit(1);
  108.  }
  109.  while(ReadPass(buffer)!=0);
  110.  source=buffer+0x200-32;
  111.  printf("n Old Password: ");
  112.  ReadStr(passwd);
  113.  if(CheckPass(source,passwd)==1)
  114.  {
  115.   printf("n New Password: ");
  116.   ReadStr(passwd);
  117.   printf("n V e r i f y : ");
  118.   ReadStr(passwd1);
  119.   if(CheckPass(passwd,passwd1)==1)
  120.   {
  121.    CopyPass(passwd,source);
  122.    WritePass(buffer);
  123.    printf("n Do you want to reboot to enable new password?(Y/N)");
  124.    key=getch();
  125.    if((key=='Y')||(key=='y'))reboot();
  126.    else {printf("n Password changed ok.");exit(1);}
  127.   }
  128.   else {printf("na Password dismatch!");exit(1);}
  129.  }
  130.  else {printf("na Wrong Password!");exit(0);}
  131. }