C++通用WMI接口实现获取Windows操作系统内核版本号
作为一名Windows开发者,能熟练掌握WMI技术,在开发Windows应用程序的时候往往能够事半功倍。今天来给大家分享一个使用WMI来获取Windows操作系统内核版本号的例子。
首先我们打开WMI测试器,连接ROOT\CIMV2命名空间,输入WQL查询语句SELECT * FROM Win32_OperatingSystem,
然后在查询的结果里我们找到Version属性,发现内核版本号为10.0.16299,即为我们所需要的结果。
那么,这个结果如何在程序中被使用,如何用C++语言来实现呢?首先我们要包含comdef.h和Wbemidl.h头文件,然后调用wbemuuid.lib库帮助我们实现WMI的功能,代码及测试程序如下:
#include <iostream>
#include <Windows.h>
#include <stdlib.h>
#include <string>
#include <comdef.h>
#include <Wbemidl.h> using namespace std; #pragma comment(lib, "wbemuuid.lib") int GetSystemVersion(char* pSystemVersion)
{
HRESULT hres;
hres = CoInitializeEx(, COINIT_MULTITHREADED);
if (FAILED(hres))
{
return -;
} hres = CoInitializeSecurity(NULL, -, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
if (FAILED(hres))
{
CoUninitialize();
return -;
} IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, , CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);
if (FAILED(hres))
{
CoUninitialize();
return -;
} IWbemServices *pSvc = NULL;
hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, , NULL, , , &pSvc);
if (FAILED(hres))
{
pLoc->Release();
CoUninitialize();
return -;
} 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();
pLoc->Release();
CoUninitialize();
return -;
} IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_OperatingSystem"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return -;
} IWbemClassObject *pclsObj = NULL;
ULONG uReturn = ;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, , &pclsObj, &uReturn);
if ( == uReturn)
{
break;
} VARIANT vtProp;
hr = pclsObj->Get(L"Version", , &vtProp, , );
WcharToChar(vtProp.bstrVal, pSystemVersion, );
VariantClear(&vtProp);
pclsObj->Release();
}
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
CoUninitialize(); return ;
} int _tmain(int argc, _TCHAR* argv[])
{
char pVersion[];
int retcode = ;
const char* s = "10.0.";
char *p;
retcode = GetSystemVersion(pVersion);
if(retcode == )
{
p = strstr(pVersion,s);
if(p!=NULL)
{
cout << "Current Windows is 2016 Server! " << endl;
getchar();
return ;
}
else
{
cout << "Current Windows is not 2016 Server! " << endl;
getchar();
return ;
}
}
return ;
}
C++通用WMI接口实现获取Windows操作系统内核版本号的更多相关文章
- Python使用wmi获取Windows相关信息
在使用Python获取Windows系统上的相关的信息可以使用WMI接口来获取, 什么是wmi? WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问.配置.管理和监 ...
- python wmi模块 获取windows内部信息
WMI (Windows Management Instrumentation) 模块可用于获取 Windows 内部信息,在使用Python获取Windows系统上的相关的信息可以使用WMI接口来获 ...
- Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件
由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...
- 利用python 与 wmi 获取WINDOWS基本信息
#!/usr/bin/env python3.5 # -*- coding:utf8 -*- import platform import subprocess import wmi def serv ...
- python使用wmi模块获取windows下的系统信息监控系统-乾颐堂
Python用WMI模块获取Windows系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 本文实例讲述了python使用wmi模块获取w ...
- Python的功能模块[0] -> wmi -> 获取 Windows 内部信息
wmi模块 / wmi Module WMI (Windows Management Instrumentation) 模块可用于获取 Windows 内部信息.该模块需要 win32com 的支持, ...
- (一)CGI (通用网关接口) 简介
CGI (通用网关接口)公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能.CGI 应用程序能与浏览器 ...
- 通过WMI接口监控服务器性能
WMI 是微软操作系统的一个内置的组件,通过使用WMI我们可以获取服务器硬件信息.收集服务器性能数据.操作Windows服务,甚至可以远程关机或是重启服务器. 一.在C#编程中使用WMI 要想在C#程 ...
- 关于Python 获取windows信息收集
收集一些Python操作windows的代码 (不管是自带的or第三方库)均来自网上 1.shutdown 操作 定时关机.重启.注销 #!/usr/bin/python #-*-coding:utf ...
随机推荐
- 【视频】Entity Framework Core 2.* 入门教程
视频专辑在B站上:https://www.bilibili.com/video/av34462368/ 内容暂时如下,还在更新中: 1. 简介 & 创建Model,生成数据库 2. 在ASP. ...
- Python面向对象 组合(选课系统示例)
# Author : Kelvin # Date : 2019/1/15 20:44 """ 学校与老师关联 课程与老师和学校关联 """ ...
- Docker 导出&加载镜像
文章首发自个人网站:https://www.exception.site/docker/docker-save-load-image 本文中,您将学习 Docker 如何导出&加载镜像.当我们 ...
- 【重学计算机】机组D6章:中央处理器
1. CPU的组成与功能 2. 数据通路 概念:执行部件间传送信息的路径,分共享通路(总线)和专用通路 抽象模型:时钟驱动下,A --> 组合逻辑 --> B D触发器定时模型: 时钟触发 ...
- Docker进阶之三:Docker应用场景
场景一:节省项目环境部署时间 1.单项目打包 每次部署项目到测试.生产等环境,都要部署一大堆依赖的软件.工具,而且部署期间出现问题几率很大,不经意就花费了很长时间. Docker主要理念就是环境打包部 ...
- [转]Have a query in Blue prism coding stage and collection stage.
本文转自:https://www.rpaforum.net/threads/have-a-query-in-blueprism-coding-stage-and-collection-stage.48 ...
- Convert.ToInt32()和int.Parse()区别
Convert.ToInt32()和int.Parse()都可以数据转换个int类型,区别在于: 1. Convert.ToInt32()将object类类型转换成int类型,例如:Convert.T ...
- 初学pyhon的几个练习小程序
一.概述 此程序示例为博主根据路飞学城的python的作业而写的(博主也是python初学者,仅花了99元报了路飞学城的python入门14天集中营3期网络课堂班),此程序非常适合python初学者拿 ...
- oracle学习笔记(六) JDBC使用
JDBC使用 1. 导包 直接使用IDEA导入依赖包即可 新建一个lib,把jar包放在这里 2. 加载驱动 Class.forName("oracle.jdbc.driver.Oracle ...
- h5与c3权威指南笔记--css3新属性选择器
[att*=val] 选择所有att属性值中包含val的.只要包含val值,不论val值在属性值的前面还是中间还是后面~ <style> div[class*=div]{ color: r ...