首页 / C++ / C++ 获取系统版本号
C++ 获取系统版本号
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ 获取系统版本号,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2298字,纯文字阅读大概需要4分钟。
内容图文
![C++ 获取系统版本号](/upload/InfoBanner/zyjiaocheng/740/a8e9f60a59a94874939c8f1cafc02a12.jpg)
因用到系统版本号,区别对待。
// 5.0 Windows 2000";
// 5.1 Windows XP";
// 5.2 Windows 2003";
// 6.0 Windows Vista";
// 6.1 Windows 7";
// 6.2 Windows 8";
// 6.3 Windows 8.1";
// 10.0 Windows 10";
//其他版本
方法1:
此方法是测下来 XP、win7、win10都通过的方法。
DWORD Major,Minor,Build;
void GetOSVersion1() { _asm { pushad mov ebx, fs:[0x18]; get self pointer from TEB mov eax, fs:[0x30]; get pointer to PEB / database mov ebx, [eax + 0A8h]; get OSMinorVersion mov eax, [eax + 0A4h]; get OSMajorVersion mov Minor, ebx mov Major, eax popad } Build = 0; }
方法2:
DWORD Major,Minor,Build; typedef NTSTATUS(WINAPI* _NtQueryInformationProcess) (_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength); _NtQueryInformationProcess NtQueryInformationProcess_; DWORD GetProcessPEBAddress(HANDLE hProc) { PROCESS_BASIC_INFORMATION peb; DWORD tmp; NtQueryInformationProcess_ = (_NtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryInformationProcess"); NtQueryInformationProcess_(hProc, ProcessBasicInformation, &peb, sizeof(PROCESS_BASIC_INFORMATION), &tmp); return (DWORD)peb.PebBaseAddress; } void GetOSVersionByHandle(HANDLE handle) { DWORD pebAddress = GetProcessPEBAddress(handle); DWORD OSMajorVersionAddress = pebAddress + 0x0a4; DWORD OSMinorVersionAddress = pebAddress + 0x0a8; DWORD OSBuildNumberAddress = pebAddress + 0x0ac; ReadProcessMemory(handle, (void*)OSMajorVersionAddress, &Major, sizeof(Major), 0); ReadProcessMemory(handle, (void*)OSMinorVersionAddress, &Minor, sizeof(Minor), 0); ReadProcessMemory(handle, (void*)OSBuildNumberAddress, &Build, sizeof(Build), 0); } void GetOSVersion2() { HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId()); GetOSVersionByHandle(handle); }
方法3:
GetVersionEx在win10版本以后,已经失效。
DWORD Major,Minor,Build; void GetOSVersion3() { OSVERSIONINFO osvi; //定义OSVERSIONINFO数据结构对象 memset(&osvi, 0, sizeof(OSVERSIONINFO)); //开空间 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); //定义大小 GetVersionEx(&osvi); //获得版本信息 Major = osvi.dwMajorVersion; Minor = osvi.dwMinorVersion; Build = osvi.dwBuildNumber; }
内容总结
以上是互联网集市为您收集整理的C++ 获取系统版本号全部内容,希望文章能够帮你解决C++ 获取系统版本号所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。