#include "stdafx.h"
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <windows.h>
#include <winioctl.h>
//把WORD数组调整字节序为little-endian,并滤除字符串结尾的空格
void ToLittleEndian(PUSHORT pWords, int nFirstIndex, int nLastIndex, LPTSTR pBuf)
{
int index;
LPTSTR pDest = pBuf;
for(index = nFirstIndex; index <= nLastIndex; ++index)
{
pDest[0] = pWords[index] >> 8;
pDest[1] = pWords[index] & 0xFF;
pDest += 2;
}
*pDest = 0;
--pDest;
while(*pDest == 0x20)
{
*pDest = 0;
--pDest;
}
}
//获取硬盘ID、序列号
BOOL GetPhyDriveSerial(LPTSTR pModelNo, LPTSTR pSerialNo)
{
BYTE IdentifyResult[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1];
DWORD dwBytesReturned;
GETVERSIONINPARAMS get_version;
SENDCMDINPARAMS send_cmd = { 0 };
HANDLE hFile = CreateFile(_T("\\\\.\\PHYSICALDRIVE0"), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return FALSE;
DeviceIoControl(hFile, SMART_GET_VERSION, NULL, 0,
&get_version, sizeof(get_version), &dwBytesReturned, NULL);
send_cmd.irDriveRegs.bCommandReg = (get_version.bIDEDeviceMap & 0x10) ? ATAPI_ID_CMD : ID_CMD;
DeviceIoControl(hFile,SMART_RCV_DRIVE_DATA,&send_cmd,sizeof(SENDCMDINPARAMS)-1,IdentifyResult,
sizeof(IdentifyResult),&dwBytesReturned,NULL);
CloseHandle(hFile);
PUSHORT pWords = (USHORT*)(((SENDCMDOUTPARAMS*)IdentifyResult)->bBuffer);
ToLittleEndian(pWords, 27, 46, pModelNo);
ToLittleEndian(pWords, 10, 19, pSerialNo);
return TRUE;
}
//滤除字符串起始位置的空格
void TrimStart(LPTSTR pBuf)
{
if(*pBuf != 0x20)
return;
LPTSTR pDest = pBuf;
LPTSTR pSrc = pBuf + 1;
while(*pSrc == 0x20)
++pSrc;
while(*pSrc)
{
*pDest = *pSrc;
++pDest;
++pSrc;
}
*pDest = 0;
}
//获取硬盘序列号
char* GetDiskNumber()
{
TCHAR szModelNo[48],szSerialNo[24];
GetPhyDriveSerial(szModelNo, szSerialNo);
char buf[1000] = "";
strcat(buf,_T(szSerialNo));
TrimStart(buf);
return buf;
}
//获取CPU的ID
char* GetCPUID()
{
unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char sel;
sel='1';
CString VernderID;
CString MyCpuID,CPUID1,CPUID2;
switch(sel)
{
case '1':
__asm{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
VernderID.Format("%s-",vendor_id);
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID2.Format("%08X%08X",s1,s2);
break;
case '2':
{
__asm{
mov ecx,119h
rdmsr
or eax,00200000h
wrmsr
}
}
AfxMessageBox("CPU id is disabled.");
break;
}
MyCpuID = CPUID1+CPUID2;
char buf[1000] = "";
strcat(buf,CPUID1);
return buf;
}
VC6.0实现获取硬盘序列号及CPUID的DLL源程序.7z
版权申诉
151 浏览量
2023-06-16
16:31:25
上传
评论
收藏 970KB 7Z 举报
应用市场
- 粉丝: 456
- 资源: 3808
最新资源
- 基于matlab实现用有限元法计算电磁场的Matlab工具 .rar
- 基于matlab实现有限元算法 计算电磁场问题 边界条件包括第一类边界和第二类边界.rar
- 基于matlab实现用于计算不同车重下的电动汽车动力性和经济性.rar
- 基于matlab实现遗传算法求解多车场车辆路径问题 有多组算例可以用.rar
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈