C/C++ 获取操作系统版本
2023-02-18 16:46:19 时间
得到当前运行操作系统版本号,用于判断系统版本,在安全开发中还是经常被使用到的一段代码片段。
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
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;
}
相关文章
- 8天学通MongoDB——第八天 驱动实践
- 8天学通MongoDB——第七天 运维技术
- 8天学通MongoDB——第六天 分片技术
- 8天学通MongoDB——第五天 主从复制
- 8天学通MongoDB——第四天 索引操作
- 8天学通MongoDB——第三天 细说高级操作
- 8天学通MongoDB——第二天 细说增删查改
- 8天学通MongoDB——第一天 基础入门
- PHP实现常见排序
- PHP天坑总结
- mac必备软件Go2shell
- 在github的某次commit中close或者fix某个issue
- 将你的PHP程序升级到PHP7.0
- go下载
- Centos搭建GIT服务器
- golang使用multiconfig后导致glog无法接受命令行参数
- 关闭OSX的rootless和修改MAMP的php.ini配置
- nginx+php 上传大文件
- 让 PHPSTORM 更智能的支持 Laravel
- docker使用笔记VI -- PHP