查询操作系统的版本,CPU序列号以及操作系统所在的SN
在某些项目中,获取操作系统版本,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相关推荐
- 查看服务器操作系统版本信息,查看服务器操作系统版本信息
查看服务器操作系统版本信息 内容精选 换一换 简要介绍OptiPNG是一个PNG优化器,可将图像文件重新压缩为更小的尺寸,而不会丢失任何信息.该程序还可以将外部格式(BMP,GIF,PNM和TIFF) ...
- Linux下查看硬盘序列号、设备序列号、操作系统版本和安装时间、系统启用时间等命令
Linux下查看硬盘序列号.设备序列号.操作系统版本和安装时间.启用时间等命令 最近由于工作需要查询一些硬盘序列号.设备序列号.操作系统版本和安装时间.系统启用时间等信息.所以对用到的命令进行一下总结 ...
- windows下查看硬盘序列号、设备序列号、操作系统版本和安装时间、系统启用时间等命令
windows下查看硬盘序列号.设备序列号.操作系统版本和安装时间.系统启用时间等命令 最近由于工作需要查询一些硬盘序列号.设备序列号.操作系统版本和安装时间.系统启用时间等信息.所以对用到的命令进行 ...
- Linux用户和组管理,查看软件缓存,通过命令查看硬件信息(cpu,版本,序列号,内存,主板,内核等)
通过修改/etc/inittab.通过这个文件修改系统的启动方式. ls –l /etc/ | more (管道),将前面的结果交给后面的命令进行处理. 在linux中遇到问题使用man命令 ...
- Linux 查询 OS、CPU、内存、硬盘信息
文章目录 Linux 查询 OS.CPU.内存.硬盘信息 一.前言 二.关于服务器基本配置 2.1 操作系统基本配置查询 2.2 CPU基本配置查询 2.3 内存基本配置查询 2.4 硬盘基本配置查询 ...
- 如何在安装了Windows操作系统的电脑上安装Linux操作系统
[原创]如何在安装了Windows操作系统的电脑上安装Linux操作系统 一.不得不知道的一件事 相信中国大多数个人用的电脑在买回来时已经 安装了Windows,并且大家习惯了用Windows,而且有 ...
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
这个问题首先得考虑的就是你的硬盘是不是SCSI硬盘 如果是,那么根本不存在"物理序列号",只可能取得卷标的序列号 如果是卷标序列号,要注意的是每次格式化硬盘的时候这个序列号都会变 ...
- CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
查看全文 http://www.taodudu.cc/news/show-4295269.html 相关文章: 计算机网络:(终章)4万字长文,总复习 干货 | 五千字长文带你快速入门FlinkSQL ...
- CPU位数、操作系统位数和编译器位数关系
随着近来AMD和Intel的64位CPU以及 Microsoft 64位操作系统的相继发布,我想来谈谈CPU位数与操作系统位数的问题,这二者有区别也有联系,操作系统位数的概念是基于CPU的位数的. ...
最新文章
- 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
- 十一:外观模式详解(Service,action与dao)
- 如何在javascript中使用多个分隔符分割字符串?
- CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略
- 在fedora23中安装virtualbox, 然后实现虚拟机irtualbox 或者 vmware 下的xp操作系统
- 【解题报告】Leecode 643. 子数组最大平均数 I——Leecode 刷题系列
- 大话企业级android读书笔记(一)
- 驱动模块Makefile 编写【原创】
- js 指定年月获取最后天
- 自主知识产权 曙光龙芯3号服务器将面市
- c语言 学习手册,c语言学习手册
- 数据库系统原理——概述
- python实现的 AWGN信道下QPSK调制信号的平均相位估计
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法
- java浪曦学习日志 异常类
- 20200427 FTL 模板语言参考 梳理 (常用)
- 2寸的照片长宽各是多少_2寸照片的高和宽是多少像素?
- 数据分析软件解读王者荣耀一年的“王者”成绩单
- 3月15日 | 开启 ICLR 2023预讲会专场二
- win10防火墙打不开,设置是灰色的、edge闪退、应用商店灰色等问题