GetHDSerial.h
上传用户:cjw5120
上传日期:2022-05-11
资源大小:5032k
文件大小:5k
源码类别:

网络截获/分析

开发平台:

Visual C++

  1. // GetHDSerial.h: interface for the CGetHDSerial class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include <windows.h>
  5. #include <stdio.h>
  6. /*
  7.  作者:海啸 lyyer English Name: Jack 
  8.   blog:http://lyyer.blog.sohu.com
  9.   website:http://www.cnGSG.com
  10.   海啸网络安全组织
  11. */
  12. #define  SENDIDLENGTH  sizeof (SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE
  13. #define  IDENTIFY_BUFFER_SIZE  512
  14. #define  FILE_DEVICE_SCSI              0x0000001b
  15. #define  IOCTL_SCSI_MINIPORT_IDENTIFY  ((FILE_DEVICE_SCSI << 16) + 0x0501)
  16. #define  IOCTL_SCSI_MINIPORT 0x0004D008  //  see NTDDSCSI.H for definition
  17. #define  IDE_ATAPI_IDENTIFY  0xA1  //  Returns ID sector for ATAPI.
  18. #define  IDE_ATA_IDENTIFY    0xEC  //  Returns ID sector for ATA.
  19. #define  IOCTL_GET_DRIVE_INFO   0x0007c088
  20. #define  IOCTL_GET_VERSION          0x00074080
  21. typedef struct _IDSECTOR
  22. {
  23.    USHORT  wGenConfig;
  24.    USHORT  wNumCyls;
  25.    USHORT  wReserved;
  26.    USHORT  wNumHeads;
  27.    USHORT  wBytesPerTrack;
  28.    USHORT  wBytesPerSector;
  29.    USHORT  wSectorsPerTrack;
  30.    USHORT  wVendorUnique[3];
  31.    CHAR    sSerialNumber[20];
  32.    USHORT  wBufferType;
  33.    USHORT  wBufferSize;
  34.    USHORT  wECCSize;
  35.    CHAR    sFirmwareRev[8];
  36.    CHAR    sModelNumber[40];
  37.    USHORT  wMoreVendorUnique;
  38.    USHORT  wDoubleWordIO;
  39.    USHORT  wCapabilities;
  40.    USHORT  wReserved1;
  41.    USHORT  wPIOTiming;
  42.    USHORT  wDMATiming;
  43.    USHORT  wBS;
  44.    USHORT  wNumCurrentCyls;
  45.    USHORT  wNumCurrentHeads;
  46.    USHORT  wNumCurrentSectorsPerTrack;
  47.    ULONG   ulCurrentSectorCapacity;
  48.    USHORT  wMultSectorStuff;
  49.    ULONG   ulTotalAddressableSectors;
  50.    USHORT  wSingleWordDMA;
  51.    USHORT  wMultiWordDMA;
  52.    BYTE    bReserved[128];
  53. } IDSECTOR, *PIDSECTOR;
  54. typedef struct _DRIVERSTATUS
  55. {
  56.    BYTE  bDriverError;  //  Error code from driver, or 0 if no error.
  57.    BYTE  bIDEStatus;    //  Contents of IDE Error register.
  58.                         //  Only valid when bDriverError is SMART_IDE_ERROR.
  59.    BYTE  bReserved[2];  //  Reserved for future expansion.
  60.    DWORD  dwReserved[2];  //  Reserved for future expansion.
  61. } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;
  62. typedef struct _SENDCMDOUTPARAMS
  63. {
  64.    DWORD         cBufferSize;   //  Size of bBuffer in bytes
  65.    DRIVERSTATUS  DriverStatus;  //  Driver status structure.
  66.    BYTE          bBuffer[1];    //  Buffer of arbitrary length in which to store the data read from the                                                       // drive.
  67. } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;
  68. typedef struct _SRB_IO_CONTROL
  69. {
  70.    ULONG HeaderLength;
  71.    UCHAR Signature[8];
  72.    ULONG Timeout;
  73.    ULONG ControlCode;
  74.    ULONG ReturnCode;
  75.    ULONG Length;
  76. } SRB_IO_CONTROL, *PSRB_IO_CONTROL;
  77. typedef struct _IDEREGS
  78. {
  79.    BYTE bFeaturesReg;       // Used for specifying SMART "commands".
  80.    BYTE bSectorCountReg;    // IDE sector count register
  81.    BYTE bSectorNumberReg;   // IDE sector number register
  82.    BYTE bCylLowReg;         // IDE low order cylinder value
  83.    BYTE bCylHighReg;        // IDE high order cylinder value
  84.    BYTE bDriveHeadReg;      // IDE drive/head register
  85.    BYTE bCommandReg;        // Actual IDE command.
  86.    BYTE bReserved;          // reserved for future use.  Must be zero.
  87. } IDEREGS, *PIDEREGS, *LPIDEREGS;
  88. typedef struct _SENDCMDINPARAMS
  89. {
  90.    DWORD     cBufferSize;   //  Buffer size in bytes
  91.    IDEREGS   irDriveRegs;   //  Structure with drive register values.
  92.    BYTE bDriveNumber;       //  Physical drive number to send 
  93.                             //  command to (0,1,2,3).
  94.    BYTE bReserved[3];       //  Reserved for future expansion.
  95.    DWORD     dwReserved[4]; //  For future use.
  96.    BYTE      bBuffer[1];    //  Input buffer.
  97. } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
  98. typedef struct _GETVERSIONOUTPARAMS
  99. {
  100.    BYTE bVersion;      // Binary driver version.
  101.    BYTE bRevision;     // Binary driver revision.
  102.    BYTE bReserved;     // Not used.
  103.    BYTE bIDEDeviceMap; // Bit map of IDE devices.
  104.    DWORD fCapabilities; // Bit mask of driver capabilities.
  105.    DWORD dwReserved[4]; // For future use.
  106. } GETVERSIONOUTPARAMS, *PGETVERSIONOUTPARAMS, *LPGETVERSIONOUTPARAMS;
  107. // 获取硬盘序列号的类
  108. class CGetHDSerial  
  109. {
  110. public:
  111. CGetHDSerial();
  112. virtual ~CGetHDSerial();
  113. void  _stdcall Win9xReadHDSerial(WORD * buffer);
  114. char* GetHDSerial();
  115. char* WORDToChar (WORD diskdata [256], int firstIndex, int lastIndex);
  116. char* DWORDToChar (DWORD diskdata [256], int firstIndex, int lastIndex);
  117. BOOL  WinNTReadSCSIHDSerial(DWORD * buffer);
  118. BOOL  WinNTReadIDEHDSerial (DWORD * buffer);
  119. BOOL  WinNTGetIDEHDInfo (HANDLE hPhysicalDriveIOCTL, PSENDCMDINPARAMS pSCIP,
  120.                       PSENDCMDOUTPARAMS pSCOP, BYTE bIDCmd, BYTE bDriveNum,
  121.                       PDWORD lpcbBytesReturned);
  122. };