问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C++获取本机的硬件信息?

发布网友 发布时间:2022-05-26 08:27

我来回答

4个回答

热心网友 时间:2023-10-09 13:21

unsigned long s1,s2;
char sel;
sel='1';
CString MyCpuID,CPUID1,CPUID2;
__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);

MyCpuID=CPUID1+CPUID2;//取得cpu序列号

硬盘物理序列号读取核心代码如下:
// Windows NT/2000/XP下读取IDE硬盘序列号
BOOL CGetHDSerial::WinNTReadIDEHDSerial(DWORD * buffer)
{
BYTE IdOutCmd [sizeof (SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1];
BOOL bFlag = FALSE;
int drive = 0;
char driveName [256];
HANDLE hPhysicalDriveIOCTL = 0;

sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive);
// Windows NT/2000/XP下创建文件需要管理员权限
hPhysicalDriveIOCTL = CreateFile (driveName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);

if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
{
GETVERSIONOUTPARAMS VersionParams;
DWORD cbBytesReturned = 0;

// 得到驱动器的IO控制器版本
memset ((void*) &VersionParams, 0, sizeof(VersionParams));
if(DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_GET_VERSION,
NULL, 0, &VersionParams,
sizeof(VersionParams),
&cbBytesReturned, NULL) )
{
if (VersionParams.bIDEDeviceMap > 0)
{
BYTE bIDCmd = 0; // IDE或者ATAPI识别命令
SENDCMDINPARAMS scip;

// 如果驱动器是光驱,采用命令IDE_ATAPI_IDENTIFY, command,
// 否则采用命令IDE_ATA_IDENTIFY读取驱动器信息
bIDCmd = (VersionParams.bIDEDeviceMap >> drive & 0x10)?
IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;

memset (&scip, 0, sizeof(scip));
memset (IdOutCmd, 0, sizeof(IdOutCmd));
// 获取驱动器信息
if (WinNTGetIDEHDInfo (hPhysicalDriveIOCTL,
&scip,
(PSENDCMDOUTPARAMS)&IdOutCmd,
(BYTE) bIDCmd,
(BYTE) drive,
&cbBytesReturned))
{
int m = 0;
USHORT *pIdSector = (USHORT *)
((PSENDCMDOUTPARAMS) IdOutCmd) -> bBuffer;

for (m = 0; m < 256; m++)
buffer[m] = pIdSector [m];
bFlag = TRUE; // 读取硬盘信息成功
}
}
}
CloseHandle (hPhysicalDriveIOCTL); // 关闭句柄
}
return bFlag;
}

// WindowsNT/2000/XP系统下读取SCSI硬盘序列号
BOOL CGetHDSerial::WinNTReadSCSIHDSerial (DWORD * buffer)
{
buffer[0]='\n';
int controller = 0;
HANDLE hScsiDriveIOCTL = 0;
char driveName [256];
sprintf (driveName, "\\\\.\\Scsi%d:", controller);
// Windows NT/2000/XP下任何权限都可以进行
hScsiDriveIOCTL = CreateFile (driveName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);

if (hScsiDriveIOCTL != INVALID_HANDLE_VALUE)
{
int drive = 0;
DWORD mmy;
for (drive = 0; drive < 2; drive++)
{
char buffer [sizeof (SRB_IO_CONTROL) + SENDIDLENGTH];
SRB_IO_CONTROL *p = (SRB_IO_CONTROL *) buffer;
SENDCMDINPARAMS *pin =
(SENDCMDINPARAMS *) (buffer + sizeof (SRB_IO_CONTROL));
// 准备参数
memset (buffer, 0, sizeof (buffer));
p -> HeaderLength = sizeof (SRB_IO_CONTROL);
p -> Timeout = 10000;
p -> Length = SENDIDLENGTH;
p -> ControlCode = IOCTL_SCSI_MINIPORT_IDENTIFY;
strncpy ((char *) p -> Signature, "SCSIDISK", 8);
pin -> irDriveRegs.bCommandReg = IDE_ATA_IDENTIFY;
pin -> bDriveNumber = drive;
// 得到SCSI硬盘信息
if (DeviceIoControl (hScsiDriveIOCTL, IOCTL_SCSI_MINIPORT,
buffer,
sizeof (SRB_IO_CONTROL) +
sizeof (SENDCMDINPARAMS) - 1,
buffer,
sizeof (SRB_IO_CONTROL) + SENDIDLENGTH,
&mmy, NULL))
{
SENDCMDOUTPARAMS *pOut =
(SENDCMDOUTPARAMS *) (buffer + sizeof (SRB_IO_CONTROL));
IDSECTOR *pId = (IDSECTOR *) (pOut -> bBuffer);
if (pId -> sModelNumber [0])
{
int n = 0;
USHORT *pIdSector = (USHORT *) pId;

for (n = 0; n < 256; n++)
buffer[n] =pIdSector [n];
return TRUE; // 读取成功
}
}
}
CloseHandle (hScsiDriveIOCTL); // 关闭句柄
}
return FALSE; // 读取失败
}

热心网友 时间:2023-10-09 13:22

通过调用windows API函数就能获取硬件信息了。比如获取CPU信息可以通过GetSystemInfo来获得。具体的查下相关API吧。

热心网友 时间:2023-10-09 13:22

http://e.codepub.com/2010/0523/22939.php
相关文章,你看看吧

热心网友 时间:2023-10-09 13:23

windows api基本有详细的实例代码,可以参考下。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在思科的CCNA,CCNE,CCIP的考证费分别是多少啊,通过率怎样 长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 厅字组的所有词语 在SQL里用命令,insert into TT(identity(A),B) select A,B 为什么用 identity 时老报错 如何向硬盘IO端口发IDENTIFY命令 五十岁买什么养老保险好 从小青梅竹马的那个人结婚了,你是什么感受? 青梅竹马要结婚了,为什么我感觉心里很难受?我应该怎么办? 今天,青梅竹马结婚了。心里空空的。说不出的感觉,有人能告诉我是为什么吗? 眼睁睁看着自己的青梅竹马嫁人,你是什么感受? 女主一觉醒来和竹马结婚了,还有了个孩子,还正在上大学,而且此时的她还正在和男主(姓沈)闹别扭 麻烦 伴奏999的vip用户帮忙下载 金美儿 新阿里郎 原版伴奏 发到356054635@qq.com 谢谢 学历学位认证申请系统 点击“下一步” 没有反应 怎么办 求【阿里郎】的《错爱》QQ空间能播放的,要求没有=号、 有没有类似于《阿里郎》的歌曲? sgwanabe 阿里郎 剧情 朝鲜 阿里郎之类的表演 有很多人组成的随时变换的画 很多人举牌子变换不同内容 这个表演学名叫什么呀? 阿里郎节的介绍 太阳能电池的开路电压是指在没有负载时的电压吗?那它所标的工作电压是什么意思? 什么叫开路电压? 离职了阿里巴巴为啥要要我的阿里郎账号密码 看过seeter的《怎见浮生不若梦》和风弄的《追逐》的亲请进! 大厅的厅的四字词语 厅可以组什么四字词浯 魔力宝贝野生幽灵问题高手进 魔力宝贝手游宠物s级蘑菇和a级幽灵那个好 魔力宝贝这两只红鬼哪个好?值得练么?为什么 魔力宝贝用什么魔宠比较好 魔力宝贝怀旧仇恨之灵 40400值得练不 魔力宝贝怀旧 出了仇恨之灵后幽灵是否被淘汰了? 魔力宝贝手游法攻型宠物 详解怎么玩 魔力宝贝帮忙算下此宠物幽灵怎么加点的? 魔力宝贝的一些问题 我的一个是中国电信机顶盒一个是中国电信遥控器怎么不灵 魔力宝贝幽灵怎么加点 魔力宝贝值不值得玩? 我今年14岁,可不可以把维生素C和维生素E一起吃 形容美好生活的古诗词 描写美好生活的古诗句 寻形容对生活有无限美好向往的古诗句,最好经典点的.. 形容生活环境美好的诗句