zoukankan      html  css  js  c++  java
  • Windows ,获取硬盘物理序列号(VC++)

    #include <windows.h>

    BOOL GetHDID(PCHAR pIDBufer)


        HANDLE hDevice=NULL;
        hDevice=::CreateFileA("\\.\PhysicalDrive0",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL);
        if(!hDevice)

      {

           hDevice=::CreateFileA("\\.\Scsi0",GENERIC_READ |GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL);

      }

        if(!hDevice)

      {

        return FALSE;

      }

        DWORD dwBytesReturned=0;
        GETVERSIONINPARAMS gVersionParsams;
        ZeroMemory(&gVersionParsams,sizeof(GETVERSIONINPARAMS));


        if(!DeviceIoControl(hDevice,SMART_GET_VERSION,NULL,NULL,&gVersionParsams,sizeof(GETVERSIONINPARAMS),&dwBytesReturned, NULL)
            || dwBytesReturned==0 || gVersionParsams.bIDEDeviceMap <= 0)
        {
            ::CloseHandle(hDevice);
            return FALSE;
        }
        
        SENDCMDINPARAMS scip;

      ZeroMemory( &scip,sizeof(SENDCMDINPARAMS)); 
        scip.cBufferSize=IDENTIFY_BUFFER_SIZE;
        scip.irDriveRegs.bSectorCountReg=1;
        scip.irDriveRegs.bSectorNumberReg=1;
        scip.irDriveRegs.bDriveHeadReg=0xA0;
        scip.irDriveRegs.bCommandReg=0xEC;

        BYTE btBuffer[1024]={ 0 };

        if(!DeviceIoControl(hDevice,SMART_RCV_DRIVE_DATA,&scip,sizeof(SENDCMDINPARAMS),
            btBuffer,1024,&dwBytesReturned,NULL))
        {
            ::CloseHandle(hDevice);
            return FALSE;
        }
        
        int nPos=0x24;            //序列号的开始位置,具体请参考SENDCMDOUTPARAMS与IDSECTOR结构
       
     while(btBuffer[nPos]<128)
        
    {

            *pIDBufer=btBuffer[nPos++];
            pIDBufer++;
        }
        
    *pIDBufer=00;
       
     return TRUE;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {

       CHAR szHDID[256];
       if(GetHDID(szHDID))

       {

          printf("硬盘序列号:%s ",szHDID);

      }  

       else

       {

        printf("取硬盘序列号失败");

       }

       getch();

       return 0;
    }

  • 相关阅读:
    解决mysql-8.0.18 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    剑指Offer面试题:28.连续子数组的最大和
    Java BigDecimal
    蓝桥杯 分考场 JAVA
    蓝桥杯 合根植物 JAVA
    蓝桥杯 大臣的旅费 JAVA
    蓝桥杯 危险系数 JAVA
    蓝桥杯 幸运数 JAVA
    【转】对memcached使用的总结和使用场景
    【转】Memcached管理与监控工具----MemAdmin
  • 原文地址:https://www.cnblogs.com/luisfan/p/5641020.html
Copyright © 2011-2022 走看看