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

📄 zhuban.cpp

📁 VC6写的利用硬盘号加密的方法
💻 CPP
字号:
/*+++     
  HDID.CPP     
  Written   by   Lu   Lin     
  http://lu0.126.com     
  2000.11.3     
  ---*/     
  #include   <windows.h>     
  #include   <iostream.h>     
  #include   <stdio.h>    
  
    
  #define   DFP_GET_VERSION   0x00074080     
  #define   DFP_SEND_DRIVE_COMMAND   0x0007c084     
  #define   DFP_RECEIVE_DRIVE_DATA   0x0007c088     
    
  #pragma   pack(1)     
  typedef   struct   _GETVERSIONOUTPARAMS   {     
    BYTE   bVersion;     //   Binary   driver   version.     
    BYTE   bRevision;     //   Binary   driver   revision.     
    BYTE   bReserved;     //   Not   used.     
    BYTE   bIDEDeviceMap;   //   Bit   map   of   IDE   devices.     
    DWORD   fCapabilities;   //   Bit   mask   of   driver   capabilities.     
    DWORD   dwReserved[4];   //   For   future   use.     
  }   GETVERSIONOUTPARAMS,   *PGETVERSIONOUTPARAMS,   *LPGETVERSIONOUTPARAMS;     
    
  typedef   struct   _IDEREGS   {     
    BYTE   bFeaturesReg;     //   Used   for   specifying   SMART   "commands".     
    BYTE   bSectorCountReg;   //   IDE   sector   count   register     
    BYTE   bSectorNumberReg;   //   IDE   sector   number   register     
    BYTE   bCylLowReg;       //   IDE   low   order   cylinder   value     
    BYTE   bCylHighReg;     //   IDE   high   order   cylinder   value     
    BYTE   bDriveHeadReg;     //   IDE   drive/head   register     
    BYTE   bCommandReg;     //   Actual   IDE   command.     
    BYTE   bReserved;       //   reserved   for   future   use.     Must   be   zero.     
  }   IDEREGS,   *PIDEREGS,   *LPIDEREGS;     
    
  typedef   struct   _SENDCMDINPARAMS   {     
    DWORD   cBufferSize;     //   Buffer   size   in   bytes     
    IDEREGS   irDriveRegs;     //   Structure   with   drive   register   values.     
    BYTE   bDriveNumber;     //   Physical   drive   number   to   send     
                  //   command   to   (0,1,2,3).     
    BYTE   bReserved[3];     //   Reserved   for   future   expansion.     
    DWORD   dwReserved[4];     //   For   future   use.     
    //BYTE     bBuffer[1];       //   Input   buffer.     
  }   SENDCMDINPARAMS,   *PSENDCMDINPARAMS,   *LPSENDCMDINPARAMS;     
    
  typedef   struct   _DRIVERSTATUS   {     
    BYTE   bDriverError;     //   Error   code   from   driver,     
                  //   or   0   if   no   error.     
    BYTE   bIDEStatus;       //   Contents   of   IDE   Error   register.     
                  //   Only   valid   when   bDriverError     
                  //   is   SMART_IDE_ERROR.     
    BYTE   bReserved[2];     //   Reserved   for   future   expansion.     
    DWORD   dwReserved[2];     //   Reserved   for   future   expansion.     
  }   DRIVERSTATUS,   *PDRIVERSTATUS,   *LPDRIVERSTATUS;     
    
  typedef   struct   _SENDCMDOUTPARAMS   {     
    DWORD         cBufferSize;     //   Size   of   bBuffer   in   bytes     
    DRIVERSTATUS   DriverStatus;     //   Driver   status   structure.     
    BYTE       bBuffer[512];       //   Buffer   of   arbitrary   length     
                      //   in   which   to   store   the   data   read   from   the   drive.     
  }   SENDCMDOUTPARAMS,   *PSENDCMDOUTPARAMS,   *LPSENDCMDOUTPARAMS;     
    
  typedef   struct   _IDSECTOR   {     
    USHORT   wGenConfig;     
    USHORT   wNumCyls;     
    USHORT   wReserved;     
    USHORT   wNumHeads;     
    USHORT   wBytesPerTrack;     
    USHORT   wBytesPerSector;     
    USHORT   wSectorsPerTrack;     
    USHORT   wVendorUnique[3];     
    CHAR   sSerialNumber[20];     
    USHORT   wBufferType;     
    USHORT   wBufferSize;     
    USHORT   wECCSize;     
    CHAR   sFirmwareRev[8];     
    CHAR   sModelNumber[40];     
    USHORT   wMoreVendorUnique;     
    USHORT   wDoubleWordIO;     
    USHORT   wCapabilities;     
    USHORT   wReserved1;     
    USHORT   wPIOTiming;     
    USHORT   wDMATiming;     
    USHORT   wBS;     
    USHORT   wNumCurrentCyls;     
    USHORT   wNumCurrentHeads;     
    USHORT   wNumCurrentSectorsPerTrack;     
    ULONG   ulCurrentSectorCapacity;     
    USHORT   wMultSectorStuff;     
    ULONG   ulTotalAddressableSectors;     
    USHORT   wSingleWordDMA;     
    USHORT   wMultiWordDMA;     
    BYTE   bReserved[128];     
  }   IDSECTOR,   *PIDSECTOR;     
    
  /*+++     
  Global   vars     
  ---*/     
  GETVERSIONOUTPARAMS   vers;     
  SENDCMDINPARAMS   in;     
  SENDCMDOUTPARAMS   out;     
  HANDLE   h;     
  DWORD   i;     
  BYTE   j;     
    
    
  VOID   ChangeByteOrder(PCHAR   szString,   USHORT   uscStrSize)   //相邻两位交换  
  {     
    
  USHORT   i;     
  CHAR   temp;     
    
    for   (i   =   0;   i   <   uscStrSize;   i+=2)     
    {     
      temp   =   szString[i];     
      szString[i]   =   szString[i+1];     
      szString[i+1]   =   temp;     
    }     
  }     
    
  void   DetectIDE(BYTE   bIDEDeviceMap){     
    if   (bIDEDeviceMap&1){     
      if   (bIDEDeviceMap&16){     
        cout<<"ATAPI   device   is   attached   to   primary   controller,   drive   0."<<endl;     
      }else{     
        cout<<"IDE   device   is   attached   to   primary   controller,   drive   0."<<endl;     
      }     
    }     
    if   (bIDEDeviceMap&2){     
      if   (bIDEDeviceMap&32){     
        cout<<"ATAPI   device   is   attached   to   primary   controller,   drive   1."<<endl;     
      }else{     
        cout<<"IDE   device   is   attached   to   primary   controller,   drive   1."<<endl;     
      }     
    }     
  if   (bIDEDeviceMap&4){     
      if   (bIDEDeviceMap&64){     
        cout<<"ATAPI   device   is   attached   to   secondary   controller,   drive   0."<<endl;     
      }else{     
        cout<<"IDE   device   is   attached   to   secondary   controller,   drive   0."<<endl;     
      }     
    }     
    if   (bIDEDeviceMap&8){     
      if   (bIDEDeviceMap&128){     
        cout<<"ATAPI   device   is   attached   to   secondary   controller,   drive   1."<<endl;     
      }else{     
        cout<<"IDE   device   is   attached   to   secondary   controller,   drive   1."<<endl;     
      }     
    }     
  }     
    
 
    
  void   hdidnt(){     
    char   hd[80];     
    PIDSECTOR   phdinfo;     
    char   s[41];     
        
    ZeroMemory(&vers,sizeof(vers));     
    //We   start   in   NT/Win2000     
    for   (j=0;j<4;j++){     
      sprintf(hd,"\\\\.\\PhysicalDrive%d",j);     
      h=CreateFile(hd,GENERIC_READ|GENERIC_WRITE,     
        FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);     
      if   (!h){     
        continue;     
      }     
      if   (!DeviceIoControl(h,DFP_GET_VERSION,0,0,&vers,sizeof(vers),&i,0)){     
        CloseHandle(h);     
        continue;     
      }     
      //If   IDE   identify   command   not   supported,   fails     
      if   (!(vers.fCapabilities&1)){     
        cout<<"Error:   IDE   identify   command   not   supported.";     
        CloseHandle(h);     
        return;     
      }     
      //Identify   the   IDE   drives     
      ZeroMemory(&in,sizeof(in));     
      ZeroMemory(&out,sizeof(out));     
      if   (j&1){     
        in.irDriveRegs.bDriveHeadReg=0xb0;     
      }else{     
        in.irDriveRegs.bDriveHeadReg=0xa0;     
      }     
      if   (vers.fCapabilities&(16>>j)){     
        //We   don't   detect   a   ATAPI   device.     
        cout<<"Drive   "<<(int)(j+1)<<"   is   a   ATAPI   device,   we   don't   detect   it"<<endl;     
        continue;     
      }else{     
        in.irDriveRegs.bCommandReg=0xec;     
      }     
      in.bDriveNumber=j;     
      in.irDriveRegs.bSectorCountReg=1;     
      in.irDriveRegs.bSectorNumberReg=1;     
      in.cBufferSize=512;     
      if   (!DeviceIoControl(h,DFP_RECEIVE_DRIVE_DATA,&in,sizeof(in),&out,sizeof(out),&i,0)){     
        cout<<"DeviceIoControl   failed:DFP_RECEIVE_DRIVE_DATA"<<endl;     
        CloseHandle(h);     
        return;     
      }     
      phdinfo=(PIDSECTOR)out.bBuffer;     
    
      char modulenumber[41]="Maxtor 6L160M0                          " ;  //3个目标序列号
	  char firmwarerev[9]="BACE1G10" ;
      char serialnumber[21]="L3APFT4G            " ;

      FILE* f=fopen("number.txt","w");

      memcpy(s,phdinfo->sModelNumber,40);  
      s[40]=0;     
      ChangeByteOrder(s,40); 
      cout<<endl<<"Module   Number:"<<s<<endl; 
	  fprintf(f,"%s\n",s );
 

      memcpy(s,phdinfo->sFirmwareRev,8);     
      s[8]=0;     
      ChangeByteOrder(s,8);   
      cout<<"Firmware   rev:"<<s<<endl;
	  fprintf(f,"%s\n",s );


      memcpy(s,phdinfo->sSerialNumber,20);     
      s[20]=0;     
      ChangeByteOrder(s,20);   
      cout<<"Serial   Number:"<<s<<endl; 
	  fprintf(f,"%s\n",s );
	 
      
	  fclose(f);
      //cout<<"\tCapacity:"<<phdinfo->ulTotalAddressableSectors/2/1024<<"M"<<endl<<endl;
      CloseHandle(h);     
    }     
   
  }     
    
 
  
  void   main(){     
    
      hdidnt();   
	  while(1)
	  {}
      return;     
     
  }    

⌨️ 快捷键说明

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