summaryrefslogtreecommitdiff
path: root/src/win32/windows.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-04-22 03:16:11 -0400
committerAdam <Adam@anope.org>2011-05-16 04:06:17 -0400
commitc8c23158a4ff74822d6c7d201dc53d879e3d91e8 (patch)
tree4bc9ae029691d5e7c03ebc1481683a010b733844 /src/win32/windows.cpp
parent1782ce260c5bc214ec0b2e39257ab1371b68ae9c (diff)
Moved the core pseudo clients out into their own modules
Diffstat (limited to 'src/win32/windows.cpp')
-rw-r--r--src/win32/windows.cpp152
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