前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++ 获取操作系统版本

C/C++ 获取操作系统版本

作者头像
微软技术分享
发布2022-12-28 17:50:06
1.4K0
发布2022-12-28 17:50:06

得到当前运行操作系统版本号,用于判断系统版本,在安全开发中还是经常被使用到的一段代码片段。

代码语言:javascript
复制
float getSysVersion(){

	float f_ret;

	typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
	DWORD dwMajor, dwMinor, dwBuildNumber;
	NTPROC proc = (NTPROC)GetProcAddress(
		LoadLibrary("ntdll.dll"),
		"RtlGetNtVersionNumbers"
	); proc(&dwMajor, &dwMinor, &dwBuildNumber); 

	// win 10
	if (dwMajor == 10 && dwMinor == 0){
		f_ret = dwMajor + dwMinor*0.1;
		return f_ret;
	}

	// win 8.1
	if (dwMajor == 6 && dwMinor == 3){
		f_ret = dwMajor + dwMinor*0.1;
		return f_ret;
	}

	// win 8.1 以下
	SYSTEM_INFO info;
	GetSystemInfo(&info);
	OSVERSIONINFOEX os;
	os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	#pragma warning(disable:4996)
	if(GetVersionEx((OSVERSIONINFO *)&os)){
		f_ret = os.dwMajorVersion + os.dwMinorVersion*0.1;
	}
	
	return f_ret;
}

效果图:

获取 ReleaseId

代码语言:javascript
复制
string get_systemReleaseId(){
	
	string releaseId = "";
	HKEY hKey_return = NULL;
	char keyValue[256];
    DWORD keySzType;
    DWORD keySize;

	if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\",0,KEY_READ,&hKey_return)){
		cout << "RegOpenKeyEx failed." << endl;
		goto end;
	}
	
	if(ERROR_SUCCESS != RegQueryValueEx(hKey_return,"ReleaseId",0,&keySzType,(LPBYTE)&keyValue,&keySize)){
		cout << "RegQueryValueEx failed." << endl;
		goto end;
	}
	
	releaseId = keyValue;
	
end:
	return releaseId;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档