BOOL IsSystemX86()
{
SYSTEM_INFO SystemInfo;
GetNativeSystemInfo(&SystemInfo);
bool bRet = SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL;
if (bRet)
{
printf("操作系统是[X86]");
}
else
{
printf("操作系统是[%s]", SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ? "X64" : "其他");
}
return bRet;
}
wstring GetSystemVerName()
{
wstring strVerName = L"错误" ;
typedef LONG(__stdcall* fnRtlGetVersion)(PRTL_OSVERSIONINFOEXW lpVersionInformation);
fnRtlGetVersion pRtlGetVersion;
HMODULE hNtdll;
LONG ntStatus;
RTL_OSVERSIONINFOEXW VersionInformation = { 0 };
hNtdll = GetModuleHandle(L"ntdll.dll");
if (hNtdll == NULL)
{
printf("GetModuleHandle ntdll Fail GLE[%d]", GetLastError());
goto FLAG;
}
pRtlGetVersion = (fnRtlGetVersion)GetProcAddress(hNtdll, "RtlGetVersion");
if (pRtlGetVersion == NULL)
{
printf("GetProcAddress Fail GLE[%d]", GetLastError());
goto FLAG;
}
VersionInformation.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
ntStatus = pRtlGetVersion(&VersionInformation);
if (ntStatus != 0)
{
printf("pRtlGetVersion ret Fail GLE[%d]", GetLastError());
goto FLAG;
}
if (VersionInformation.dwMajorVersion == 5)
{
if (VersionInformation.dwMinorVersion == 0)
{
strVerName = L"Windows 2000";
}
else if (VersionInformation.dwMinorVersion == 1)
{
strVerName = L"Windows XP";
}
else if (VersionInformation.dwMinorVersion == 2)
{
if (VersionInformation.wProductType == VER_NT_WORKSTATION && !IsSystemX86())
{
strVerName = L"Windows XP Professional x64 Edition";
}
else if (GetSystemMetrics(SM_SERVERR2) == 0)
{
strVerName = L"Windows Server 2003";
}
else if (GetSystemMetrics(SM_SERVERR2) != 0)
{
strVerName = L"Windows Server 2003 R2";
}
else if (VersionInformation.wSuiteMask & VER_SUITE_WH_SERVER)
{
strVerName = L"Windows Home Server";
}
}
}
else if (VersionInformation.dwMajorVersion == 6)
{
if (VersionInformation.dwMinorVersion == 0)
{
strVerName = VersionInformation.wProductType == VER_NT_WORKSTATION ? L"Windows Server 2008" : L"Windows Vista";
}
else if (VersionInformation.dwMinorVersion == 1)
{
strVerName = VersionInformation.wProductType == VER_NT_WORKSTATION ? L"Windows 7" : L"Windows Server 2008 R2";
}
else if (VersionInformation.dwMinorVersion == 2)
{
strVerName = VersionInformation.wProductType == VER_NT_WORKSTATION ? L"Windows 8" : L"Windows Server 2012";
}
else if (VersionInformation.dwMinorVersion == 3)
{
strVerName = VersionInformation.wProductType == VER_NT_WORKSTATION ? L"Windows 8.1" : L"Windows Server 2012 R2";
}
}
else if (VersionInformation.dwMajorVersion == 10)
{
if (VersionInformation.dwMinorVersion == 0)
{
strVerName = VersionInformation.wProductType == VER_NT_WORKSTATION ? L"Windows 10" : L"Windows Server 2016";
}
}
else
{
}
FLAG:
return strVerName;
}
MSDN :