diff options
author | Adam <Adam@anope.org> | 2011-04-22 03:16:11 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-05-16 04:06:17 -0400 |
commit | c8c23158a4ff74822d6c7d201dc53d879e3d91e8 (patch) | |
tree | 4bc9ae029691d5e7c03ebc1481683a010b733844 /src/win32/windows.cpp | |
parent | 1782ce260c5bc214ec0b2e39257ab1371b68ae9c (diff) |
Moved the core pseudo clients out into their own modules
Diffstat (limited to 'src/win32/windows.cpp')
-rw-r--r-- | src/win32/windows.cpp | 152 |
1 files changed, 151 insertions, 1 deletions
diff --git a/src/win32/windows.cpp b/src/win32/windows.cpp index b57171dec..3876c62bf 100644 --- a/src/win32/windows.cpp +++ b/src/win32/windows.cpp @@ -128,7 +128,7 @@ const char *inet_ntop(int af, const void *src, char *dst, size_t size) * @param tz Should be NULL, it is not used * @return 0 on success */ -int gettimeofday(timeval *tv, char *) +int gettimeofday(timeval *tv, void *) { SYSTEMTIME st; GetSystemTime(&st); @@ -139,4 +139,154 @@ int gettimeofday(timeval *tv, char *) return 0; } +Anope::string GetWindowsVersion() +{ + OSVERSIONINFOEX osvi; + SYSTEM_INFO si; + + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + ZeroMemory(&si, sizeof(SYSTEM_INFO)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + + BOOL bOsVersionInfoEx = GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&osvi)); + if (!bOsVersionInfoEx) + { + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if (!GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&osvi))) + return ""; + } + GetSystemInfo(&si); + + Anope::string buf, extra, cputype; + /* Determine CPU type 32 or 64 */ + if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + cputype = " 64-bit"; + else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) + cputype = " 32-bit"; + else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) + cputype = " Itanium 64-bit"; + + switch (osvi.dwPlatformId) + { + /* test for the Windows NT product family. */ + case VER_PLATFORM_WIN32_NT: + /* Windows Vista or Windows Server 2008 */ + if (osvi.dwMajorVersion == 6 && !osvi.dwMinorVersion) + { + if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + extra = " Enterprise Edition"; + else if (osvi.wSuiteMask & VER_SUITE_DATACENTER) + extra = " Datacenter Edition"; + else if (osvi.wSuiteMask & VER_SUITE_PERSONAL) + extra = " Home Premium/Basic"; + if (osvi.dwMinorVersion == 0) + { + if (osvi.wProductType & VER_NT_WORKSTATION) + buf = "Microsoft Windows Vista" + cputype + extra; + else + buf = "Microsoft Windows Server 2008" + cputype + extra; + } + else if (osvi.dwMinorVersion == 1) + { + if (osvi.wProductType & VER_NT_WORKSTATION) + buf = "Microsoft Windows 7" + cputype + extra; + else + buf = "Microsoft Windows Server 2008 R2" + cputype + extra; + } + } + /* Windows 2003 or Windows XP Pro 64 */ + if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) + { + if (osvi.wSuiteMask & VER_SUITE_DATACENTER) + extra = " Datacenter Edition"; + else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + extra = " Enterprise Edition"; +#ifdef VER_SUITE_COMPUTE_SERVER + else if (osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER) + extra = " Compute Cluster Edition"; +#endif + else if (osvi.wSuiteMask == VER_SUITE_BLADE) + extra = " Web Edition"; + else + extra = " Standard Edition"; + if (osvi.wProductType & VER_NT_WORKSTATION && si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + buf = "Microsoft Windows XP Professional x64 Edition" + extra; + else + buf = "Microsoft Windows Server 2003 Family" + cputype + extra; + } + if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) + { + if (osvi.wSuiteMask & VER_SUITE_EMBEDDEDNT) + extra = " Embedded"; + else if (osvi.wSuiteMask & VER_SUITE_PERSONAL) + extra = " Home Edition"; + buf = "Microsoft Windows XP" + extra; + } + if (osvi.dwMajorVersion == 5 && !osvi.dwMinorVersion) + { + if (osvi.wSuiteMask & VER_SUITE_DATACENTER) + extra = " Datacenter Server"; + else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + extra = " Advanced Server"; + else + extra = " Server"; + buf = "Microsoft Windows 2000" + extra; + } + if (osvi.dwMajorVersion <= 4) + { + if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) + extra = " Enterprise Edition"; + buf = "Microsoft Windows NT Server 4.0" + extra; + } + break; + case VER_PLATFORM_WIN32_WINDOWS: + if (osvi.dwMajorVersion == 4 && !osvi.dwMinorVersion) + { + if (osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B') + extra = " OSR2"; + buf = "Microsoft Windows 95" + extra; + } + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) + { + if (osvi.szCSDVersion[1] == 'A') + extra = "SE"; + buf = "Microsoft Windows 98" + extra; + } + if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) + buf = "Microsoft Windows Millenium Edition"; + } + return buf; +} + +bool SupportedWindowsVersion() +{ + OSVERSIONINFOEX osvi; + + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + + BOOL bOsVersionInfoEx = GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&osvi)); + if (!bOsVersionInfoEx) + { + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if (!GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&osvi))) + return false; + } + + switch (osvi.dwPlatformId) + { + /* test for the Windows NT product family. */ + case VER_PLATFORM_WIN32_NT: + /* win nt4 */ + if (osvi.dwMajorVersion <= 4) + return false; + /* the rest */ + return true; + /* win95 win98 winME */ + case VER_PLATFORM_WIN32_WINDOWS: + return false; + } + return false; +} + #endif |