diff --git a/Scylla/SystemInformation.cpp b/Scylla/SystemInformation.cpp index c4c3f27..da8918d 100644 --- a/Scylla/SystemInformation.cpp +++ b/Scylla/SystemInformation.cpp @@ -1,62 +1,76 @@ #include "SystemInformation.h" OPERATING_SYSTEM SystemInformation::currenOS = UNKNOWN_OS; bool SystemInformation::getSystemInformation() { OSVERSIONINFOEX osvi = {0}; SYSTEM_INFO si = {0}; def_GetNativeSystemInfo _GetNativeSystemInfo = 0; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (!GetVersionEx((OSVERSIONINFO*) &osvi)) { return false; } if ((osvi.dwMajorVersion < 5) || ((osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion == 0))) { return false; } _GetNativeSystemInfo = (def_GetNativeSystemInfo)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetNativeSystemInfo"); if (_GetNativeSystemInfo) { _GetNativeSystemInfo(&si); } else { GetSystemInfo(&si); } - if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 && osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0) + bool isX64 = si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64; + bool isX86 = si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL; + + DWORD major = osvi.dwMajorVersion; + DWORD minor = osvi.dwMinorVersion; + + if(isX64 && major == 5 && minor == 2) + { + currenOS = WIN_XP_64; + } + else if(isX86 && major == 5 && minor == 1) + { + currenOS = WIN_XP_32; + } + if(isX64 && major == 6 && minor == 0) { currenOS = WIN_VISTA_64; } - else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL && osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0) + else if(isX86 && major == 6 && minor == 0) { currenOS = WIN_VISTA_32; } - else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 && osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1) + else if(isX64 && major == 6 && minor == 1) { currenOS = WIN_7_64; } - else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL && osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1) + else if(isX86 && major == 6 && minor == 1) { currenOS = WIN_7_32; } - else if(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 && osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) + else if(isX64 && major == 6 && minor == 2) { - currenOS = WIN_XP_64; + currenOS = WIN_8_64; } - else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) + else if(isX86 && major == 6 && minor == 2) { - currenOS = WIN_XP_32; + currenOS = WIN_8_32; } else { currenOS = UNKNOWN_OS; } return (currenOS != UNKNOWN_OS); -} \ No newline at end of file +} diff --git a/Scylla/SystemInformation.h b/Scylla/SystemInformation.h index ccac3a4..e687a6a 100644 --- a/Scylla/SystemInformation.h +++ b/Scylla/SystemInformation.h @@ -1,22 +1,24 @@ #pragma once #include enum OPERATING_SYSTEM { UNKNOWN_OS, WIN_XP_32, WIN_XP_64, WIN_VISTA_32, WIN_VISTA_64, WIN_7_32, WIN_7_64, + WIN_8_32, + WIN_8_64 }; typedef void (WINAPI *def_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo); class SystemInformation { public: static OPERATING_SYSTEM currenOS; static bool getSystemInformation(); private: -}; \ No newline at end of file +};