C++实现获取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(0, COINIT_MULTITHREADED);
	if (FAILED(hres))
	{
		return -1;
	}

	hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
	if (FAILED(hres))
	{
		CoUninitialize();
		return -1;
	}

	IWbemLocator *pLoc = NULL;
	hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);
	if (FAILED(hres))
	{
		CoUninitialize();
		return -1;
	}

	IWbemServices *pSvc = NULL;
	hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc);
	if (FAILED(hres))
	{
		pLoc->Release();
		CoUninitialize();
		return -1;
	}

	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 -1;
	}

	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 -1;
	}

	IWbemClassObject *pclsObj = NULL;
	ULONG uReturn = 0;
	while (pEnumerator)
	{
		HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
		if (0 == uReturn)
		{
			break;
		}

		VARIANT vtProp;
		hr = pclsObj->Get(L"Version", 0, &vtProp, 0, 0);
		WcharToChar(vtProp.bstrVal, pSystemVersion, 64);
		VariantClear(&vtProp);
		pclsObj->Release();
	}
	pSvc->Release();
	pLoc->Release();
	pEnumerator->Release();
	CoUninitialize();

	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	char pVersion[20];
	int retcode = 0;
	const char* s = "10.0.";
	char *p;
	retcode = GetSystemVersion(pVersion);
	if(retcode == 0)
	{
		p = strstr(pVersion,s);
		if(p!=NULL)
		{
			cout << "Current Windows is 2016 Server! " << endl;
			getchar();
			return 2;
		}
		else
		{
			cout << "Current Windows is not 2016 Server! " << endl;
			getchar();
			return 0;
		}
	}
	return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c cef 后台管理是一款基于 CEF 技术开发的、用于管理后台系统的软件。其主要功能包含用户管理、权限管理、数据管理、日志管理等多个方面,可以帮助企业或组织进行整个后台系统的管理工作。 在用户管理方面,c cef 后台管理可以实现用户注册、登录、身份验证等功能,并且具有权限管理功能,可以对用户进行角色分配和权限设置。数据管理方面,该软件可以对数据进行查询、编辑、导出等操作,对于不同的数据类型,c cef 后台管理都有相应的处理方式。在日志管理方面,c cef 后台管理可以显示系统的操作日志、异常日志等详细信息,方便管理人员进行分析和排错。 除此之外,c cef 后台管理还具有灵活的扩展性和定制性。用户可以通过界面配置,编辑模板文件等方式,自定义系统的功能和外观。同时,c cef 后台管理支持多语言切换,可以满足不同国家和地区的语言需求。 综上所述,c cef 后台管理具有多种功能和优点,既方便了后台管理人员的工作,又提高了系统的运行效率和安全性。对于使用者来说,这款软件也具有良好的用户体验和易用性,是一款非常值得推荐的后台管理软件。 ### 回答2: Cef是一款开源的嵌入式浏览器框架,可以将Chrome浏览器的内核嵌入到其他应用程序中,提供完整的HTML5支持和高性能的JavaScript执行。Cef也被广泛用于开发Web应用程序、可视化应用,以及许多行业的自动化测试和生产应用场景。 作为Cef的后台管理平台,Cef后台管理提供了一个完整的Web管理控制台,方便开发者对Cef应用程序进行管理和配置,包括: 1. 应用程序基本信息配置:开发者可以通过后台管理平台,为自己的Cef应用程序配置基本信息,包括应用名称、版本号、描述等。 2. 应用程序运行参数配置:开发者可以通过后台管理平台,为自己的Cef应用程序设置运行参数,包括启动命令行、浏览器相关配置参数、要使用的插件等。 3. 数据库管理和备份:后台管理平台可以提供数据库管理和备份功能,可对整个数据库进行备份和恢复,保障数据的安全性。 4. 用户权限管理:后台管理平台还可以提供用户权限管理功能,管理员可以为不同的用户配置不同的操作权限,保障系统安全性。 总之,Cef后台管理平台可以大大方便开发者进行Cef应用程序的管理和维护,提高开发效率和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值