#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\n",szHDID);

  }

   else

{

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

}

   getch();

return 0;
}

Windows ,获取硬盘物理序列号(VC++)的更多相关文章

  1. MFC如何获取硬盘的序列号

    要把如下的两篇文章结合起来看: qt怎么获取硬盘序列号,是不是没戏? http://www.qtcn.org/bbs/simple/?t65637.html system("wmic pat ...

  2. windows获取硬盘使用率等信息

    #coding=utf8 import psutil cpu = {'user' : 0, 'system' : 0, 'idle' : 0, 'percent' : 0} mem = {'total ...

  3. java通过jni方式获取硬盘序列号(windows,linux)

    linux系统java通过jni方式获取硬盘序列号 http://blog.csdn.net/starter110/article/details/8186788 使用jni在windows下读取硬盘 ...

  4. Windows 下获取硬盘序列号

    只获取序列号 以下任意一条命令都可以: wmic diskdrive get serialnumber wmic path win32_physicalmedia get SerialNumber w ...

  5. vc 获取 硬盘序列号 和 cpu

    vc 获取 硬盘序列号 和 cpu 唯一iD的方法?如题---------网上找来很多资料 也没找到, 要支持xp win7 32/64 系统下都能获取 硬盘序列号 和cpu ID 哪位朋友帮帮忙: ...

  6. c/c++获取硬盘序列号

    最近在接触软件注册模块,需要获取硬盘序列号来生成注册码. 硬盘序列号,英文名:Hard Disk Serial Number,该号是硬盘厂家为区别产品而设置的,是唯一的.网上搜索一下,发现获取硬盘序列 ...

  7. delphi 获取硬盘序列号、cpu号、bios号、网卡号

    delphi 获取硬盘 序列号 function GetIdeNum: String; type TSrbIoControl = packed record HeaderLength : ULONG; ...

  8. 获取硬盘序列号的Fortran程序

    以前写了个获取硬盘序列号的fortran程序,但未经实证 program FortranDemo Use Kernel32 Implicit None Interface SUBROUTINE Get ...

  9. c++ windows 获取mac地址

    c++ windows 获取mac地址 GetAdaptersInfo 用windows api获取mac地址和硬盘id编号 aa

随机推荐

  1. 基于swoole的聊天室模型

    client.html: <!doctype html><html><head> <meta charset="utf-8"> &l ...

  2. VC++程序运行时间测试函数

    0:介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录函数或者算 ...

  3. Srv数据格式

    1.简介 类似msg文件, srv文件是用来描述服务( service数据类型的, service通信的数据格式定义在*.srv中. 它声明了一个服务, 包括请求(request)和响应( reply ...

  4. grep 搜索多个同时满足的条件

    (二) Grep AND 操作 1. 使用 -E 'pattern1.*pattern2' grep命令本身不提供AND功能.但是,使用 -E 选项可以实现AND操作.   grep -E 'patt ...

  5. java 工作流项目源码 SSM 框架 Activiti-master springmvc 有手机端功能

    即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 (即时聊天功能支持手机端,详情下面有截图) 工作流模块---------------------------------- ...

  6. 通过脚手架创建Vue项目

    第一步 准备工作 1.下载安装Node.js 验证是否安装的方法,在命令行输入node -v 2.安装Vue 在命令行输入npm install -g @vue/cli 查看Vue版本号 npm vu ...

  7. leetcode-53-Maximum Subarray(动态规划详解)

    题目描述: Given an integer array nums, find the contiguous subarray (containing at least one number) whi ...

  8. 仙人掌&圆方树

    仙人掌&圆方树 Tags:图论 [x] [luogu4320]道路相遇 https://www.luogu.org/problemnew/show/P4320 [ ] [SDOI2018]战略 ...

  9. 控制 matplotlib 子图大小

    效果图: 代码: import numpy as np import matplotlib.pyplot as plt '''调整 matplotlib 子图的大小''' x1 = np.linspa ...

  10. 16-[JavaScript]-ECMAScript 2

    1.流程控制:if switch <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...