在某些项目中,获取操作系统版本,CPU序列号以及操作系统所在的硬盘序列号。

#pragma once#define WIN32_DCOM
#include<iostream>
#include<comdef.h>
#include<wbemidl.h>
#include<windows.h>
#include<string>
#pragma comment(lib,"wbemuuid.lib")
#pragma warning(disable : 4996)
#define MAX_BUM 128
using namespace std;typedef struct _meth_mess {char CPU_id[MAX_BUM];char SYS_diskid[MAX_BUM];
}meth_mess;BOOL  str_exchange(wchar_t* str_a,char* str_b,int size) {int len = WideCharToMultiByte(CP_ACP, 0, str_a, -1, NULL, 0, NULL, NULL);if (len > 0 && len < size) {len = WideCharToMultiByte(CP_ACP, 0, str_a, -1, str_b, len, NULL, NULL);if (len <= 0)return false;return true;}return false;
}void dele_n(char* data) {int i = -1, j = 0;int ch = ' ';//ch赋值位空while (data[++i] != '\0') {if (data[i] != ch) {data[j++] = data[i];}}data[j] = '\0';
}int _getdata(meth_mess &mess) {HRESULT hres;//HRESULT类型: 常被用作COM调用的返回值memset(&mess, 0, sizeof(meth_mess));CoUninitialize();//CoUninitialize关闭当前线程的COM库hres = CoInitializeEx(0, COINIT_MULTITHREADED);//第二个参数设置当前线程的并发模式为多线程if (FAILED(hres)) {//判断hres是否小于0return 0;}IWbemLocator* loc = NULL;hres = CoCreateInstance(//创建一个COM对象CLSID_WbemLocator,//此参数用来创建指定对象0,CLSCTX_INPROC_SERVER,IID_IWbemLocator,(LPVOID *)&loc);if (FAILED(hres)) {CoUninitialize();return 0;}IWbemServices *pSvc = NULL;hres = loc->ConnectServer(//命名空间的连接_bstr_t(L"ROOT\\CIMV2"),//命名空间NULL,NULL,0,NULL,0,0,&pSvc);if (FAILED(hres)){loc->Release();CoUninitialize();return 0;}hres = CoSetProxyBlanket(//在指定代理上生成调用使用设置身份验证信息pSvc,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_NONE,NULL,RPC_C_AUTHN_LEVEL_CALL,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE);if (FAILED(hres)){pSvc->Release();loc->Release();CoUninitialize();return 0;}//获取CPU序列号IEnumWbemClassObject* pEnumerator = NULL;// 接口用于枚举公共信息模型(CIM)对象,类似于标准的COM枚举器hres = pSvc->ExecQuery(//执行查询检索对象bstr_t("WQL"),//理支持的有效查询语言的字符串,必须是WQLbstr_t("SELECT * FROM win32_Processor"), //查询的文本WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);//如果未发生错误,则接收允许调用方检索查询结果集中的实例的枚举器if (FAILED(hres)) {pSvc->Release();loc->Release();}IWbemClassObject *pclsObj;//IWbemClassObject接口包含并操作类定义和类对象实例。ULONG uReturn = 0;while (pEnumerator){//当返回的对象数与uCount中请求对象数匹配,返回WBEM_S_NO_ERRORHRESULT hr = pEnumerator->Next(// next法获取一个或多个从枚举中的当前位置开始的对象WBEM_INFINITE,//time指定在返回之前阻止的最长时间1,//请求的对象数&pclsObj,//指向足够存储的指针,保存uCount指定的IWbemClassObject接口指针数。当不再需要每个已接收的接口指针时,调用方必须在它们上调用Release。&uReturn);//指向接收返回的对象数的ULONG的指针。if (FAILED(hr)) break;if (0 == uReturn){break;}VARIANT vtProp;//VARIANT变体类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据。vtProp.bstrVal = NULL;hr = pclsObj->Get(//检索指定的属性值L"ProcessorId",//所需属性的名称0,&vtProp,//成功后为限定符分配正确的类型和值0,0);if (NULL == vtProp.bstrVal || FAILED(hr)) {break;}int ast = str_exchange(vtProp.bstrVal, mess.CPU_id , MAX_BUM);// bstrVal:COM自动化和互操作函数使用的字符串数据类型if (!ast) break;VariantClear(&vtProp);pclsObj->Release();}//获取系统所在硬盘的IDint diskIndex = 0;pEnumerator->Release();pEnumerator = NULL;hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM Win32_DiskPartition WHERE Bootable = TRUE"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);if (FAILED(hres)){pSvc->Release();loc->Release();CoUninitialize();}while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);//找到系统所在硬盘的IDif (0 == uReturn){break;}VARIANT vtProp;vtProp.intVal = 0;hr = pclsObj->Get(L"DiskIndex", 0, &vtProp, 0, 0);diskIndex = vtProp.intVal;//返回一个int类型cout << "disk_ID:" << diskIndex << endl;VariantClear(&vtProp);pclsObj->Release();}//根据系统所在硬盘的ID查询序列号char index[10];string strQuery = "SELECT * FROM Win32_DiskDrive WHERE Index = ";itoa(diskIndex, index, 10);string indexStr(index);strQuery += indexStr;pEnumerator->Release();pEnumerator = NULL;hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t(strQuery.c_str()),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);if (FAILED(hres)){pSvc->Release();loc->Release();CoUninitialize();}while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);if (0 == uReturn){break;}VARIANT vtProp;vtProp.bstrVal = NULL;hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);int ast = str_exchange(vtProp.bstrVal, mess.SYS_diskid , MAX_BUM);if (!ast) break;dele_n(mess.SYS_diskid);VariantClear(&vtProp);pclsObj->Release();}return 1;
}

查询操作系统的版本,CPU序列号以及操作系统所在的SN相关推荐

  1. 查看服务器操作系统版本信息,查看服务器操作系统版本信息

    查看服务器操作系统版本信息 内容精选 换一换 简要介绍OptiPNG是一个PNG优化器,可将图像文件重新压缩为更小的尺寸,而不会丢失任何信息.该程序还可以将外部格式(BMP,GIF,PNM和TIFF) ...

  2. Linux下查看硬盘序列号、设备序列号、操作系统版本和安装时间、系统启用时间等命令

    Linux下查看硬盘序列号.设备序列号.操作系统版本和安装时间.启用时间等命令 最近由于工作需要查询一些硬盘序列号.设备序列号.操作系统版本和安装时间.系统启用时间等信息.所以对用到的命令进行一下总结 ...

  3. windows下查看硬盘序列号、设备序列号、操作系统版本和安装时间、系统启用时间等命令

    windows下查看硬盘序列号.设备序列号.操作系统版本和安装时间.系统启用时间等命令 最近由于工作需要查询一些硬盘序列号.设备序列号.操作系统版本和安装时间.系统启用时间等信息.所以对用到的命令进行 ...

  4. Linux用户和组管理,查看软件缓存,通过命令查看硬件信息(cpu,版本,序列号,内存,主板,内核等)

     通过修改/etc/inittab.通过这个文件修改系统的启动方式. ls –l /etc/ | more   (管道),将前面的结果交给后面的命令进行处理. 在linux中遇到问题使用man命令 ...

  5. Linux 查询 OS、CPU、内存、硬盘信息

    文章目录 Linux 查询 OS.CPU.内存.硬盘信息 一.前言 二.关于服务器基本配置 2.1 操作系统基本配置查询 2.2 CPU基本配置查询 2.3 内存基本配置查询 2.4 硬盘基本配置查询 ...

  6. 如何在安装了Windows操作系统的电脑上安装Linux操作系统

    [原创]如何在安装了Windows操作系统的电脑上安装Linux操作系统 一.不得不知道的一件事 相信中国大多数个人用的电脑在买回来时已经 安装了Windows,并且大家习惯了用Windows,而且有 ...

  7. 用C#获取硬盘序列号,CPU序列号,网卡MAC地址

    这个问题首先得考虑的就是你的硬盘是不是SCSI硬盘 如果是,那么根本不存在"物理序列号",只可能取得卷标的序列号 如果是卷标序列号,要注意的是每次格式化硬盘的时候这个序列号都会变 ...

  8. CPU位数、操作系统位数、指令集、寄存器位数、机器字长等

    查看全文 http://www.taodudu.cc/news/show-4295269.html 相关文章: 计算机网络:(终章)4万字长文,总复习 干货 | 五千字长文带你快速入门FlinkSQL ...

  9. CPU位数、操作系统位数和编译器位数关系

    随着近来AMD和Intel的64位CPU以及 Microsoft 64位操作系统的相继发布,我想来谈谈CPU位数与操作系统位数的问题,这二者有区别也有联系,操作系统位数的概念是基于CPU的位数的.   ...

最新文章

  1. 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
  2. 十一:外观模式详解(Service,action与dao)
  3. 如何在javascript中使用多个分隔符分割字符串?
  4. CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略
  5. 在fedora23中安装virtualbox, 然后实现虚拟机irtualbox 或者 vmware 下的xp操作系统
  6. 【解题报告】Leecode 643. 子数组最大平均数 I——Leecode 刷题系列
  7. 大话企业级android读书笔记(一)
  8. 驱动模块Makefile 编写【原创】
  9. js 指定年月获取最后天
  10. 自主知识产权 曙光龙芯3号服务器将面市
  11. c语言 学习手册,c语言学习手册
  12. 数据库系统原理——概述
  13. python实现的 AWGN信道下QPSK调制信号的平均相位估计
  14. 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法
  15. java浪曦学习日志 异常类
  16. 20200427 FTL 模板语言参考 梳理 (常用)
  17. 2寸的照片长宽各是多少_2寸照片的高和宽是多少像素?
  18. 数据分析软件解读王者荣耀一年的“王者”成绩单
  19. 3月15日 | 开启 ICLR 2023预讲会专场二
  20. win10防火墙打不开,设置是灰色的、edge闪退、应用商店灰色等问题

热门文章

  1. Spring连接Mysql数据库
  2. STM32入门(二十五)----高级定时器
  3. 使用vnc远程centos桌面
  4. 分享几个谷歌(Chrome 内核浏览器)浏览器扩展 crx 下载站
  5. 树莓派-2-RaspBerry4B硬件介绍和初始化安装
  6. Broadcast Receiver广播
  7. 郭天祥的10天学会51单片机_第三节
  8. 哪个国家大学计算机物联网好,物联网专业实力强的大学有哪些
  9. 百度深度学习平台使用
  10. 电脑给山寨内存卡清理垃圾丢失了数据怎么恢复