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\n",szHDID);
}
else
{
printf("取硬盘序列号失败");
}
getch();
return 0;
}
Windows ,获取硬盘物理序列号(VC++)的更多相关文章
- MFC如何获取硬盘的序列号
要把如下的两篇文章结合起来看: qt怎么获取硬盘序列号,是不是没戏? http://www.qtcn.org/bbs/simple/?t65637.html system("wmic pat ...
- windows获取硬盘使用率等信息
#coding=utf8 import psutil cpu = {'user' : 0, 'system' : 0, 'idle' : 0, 'percent' : 0} mem = {'total ...
- java通过jni方式获取硬盘序列号(windows,linux)
linux系统java通过jni方式获取硬盘序列号 http://blog.csdn.net/starter110/article/details/8186788 使用jni在windows下读取硬盘 ...
- Windows 下获取硬盘序列号
只获取序列号 以下任意一条命令都可以: wmic diskdrive get serialnumber wmic path win32_physicalmedia get SerialNumber w ...
- vc 获取 硬盘序列号 和 cpu
vc 获取 硬盘序列号 和 cpu 唯一iD的方法?如题---------网上找来很多资料 也没找到, 要支持xp win7 32/64 系统下都能获取 硬盘序列号 和cpu ID 哪位朋友帮帮忙: ...
- c/c++获取硬盘序列号
最近在接触软件注册模块,需要获取硬盘序列号来生成注册码. 硬盘序列号,英文名:Hard Disk Serial Number,该号是硬盘厂家为区别产品而设置的,是唯一的.网上搜索一下,发现获取硬盘序列 ...
- delphi 获取硬盘序列号、cpu号、bios号、网卡号
delphi 获取硬盘 序列号 function GetIdeNum: String; type TSrbIoControl = packed record HeaderLength : ULONG; ...
- 获取硬盘序列号的Fortran程序
以前写了个获取硬盘序列号的fortran程序,但未经实证 program FortranDemo Use Kernel32 Implicit None Interface SUBROUTINE Get ...
- c++ windows 获取mac地址
c++ windows 获取mac地址 GetAdaptersInfo 用windows api获取mac地址和硬盘id编号 aa
随机推荐
- 基于swoole的聊天室模型
client.html: <!doctype html><html><head> <meta charset="utf-8"> &l ...
- VC++程序运行时间测试函数
0:介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录函数或者算 ...
- Srv数据格式
1.简介 类似msg文件, srv文件是用来描述服务( service数据类型的, service通信的数据格式定义在*.srv中. 它声明了一个服务, 包括请求(request)和响应( reply ...
- grep 搜索多个同时满足的条件
(二) Grep AND 操作 1. 使用 -E 'pattern1.*pattern2' grep命令本身不提供AND功能.但是,使用 -E 选项可以实现AND操作. grep -E 'patt ...
- java 工作流项目源码 SSM 框架 Activiti-master springmvc 有手机端功能
即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 (即时聊天功能支持手机端,详情下面有截图) 工作流模块---------------------------------- ...
- 通过脚手架创建Vue项目
第一步 准备工作 1.下载安装Node.js 验证是否安装的方法,在命令行输入node -v 2.安装Vue 在命令行输入npm install -g @vue/cli 查看Vue版本号 npm vu ...
- leetcode-53-Maximum Subarray(动态规划详解)
题目描述: Given an integer array nums, find the contiguous subarray (containing at least one number) whi ...
- 仙人掌&圆方树
仙人掌&圆方树 Tags:图论 [x] [luogu4320]道路相遇 https://www.luogu.org/problemnew/show/P4320 [ ] [SDOI2018]战略 ...
- 控制 matplotlib 子图大小
效果图: 代码: import numpy as np import matplotlib.pyplot as plt '''调整 matplotlib 子图的大小''' x1 = np.linspa ...
- 16-[JavaScript]-ECMAScript 2
1.流程控制:if switch <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...