GetWindowsVersion.c

Go to the documentation of this file.
00001 #include "GetWindowsVersion.h"
00002 /*-----------------------------------------------------------------------------------*/
00003 typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
00004 #define SM_SERVERR2            89
00005 /*-----------------------------------------------------------------------------------*/
00006 IMPORT_EXPORT_GETWINDOWSVERSION_DLL int GetWindowsVersion(void)
00007 {
00008         OSVERSIONINFOEX osvi;
00009         BOOL bOsVersionInfoEx;
00010 
00011         ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
00012         osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
00013 
00014         if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
00015         {
00016                 osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
00017                 if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) return OS_ERROR;
00018         }
00019 
00020         switch (osvi.dwPlatformId)
00021         {
00022                 case VER_PLATFORM_WIN32_NT:
00023                         if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
00024                         {
00025                                 if( osvi.wProductType == VER_NT_WORKSTATION ) return OS_WIN32_WINDOWS_VISTA;
00026                                 else return OS_WIN32_WINDOWS_LONGHORN;
00027                         }
00028 
00029                         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
00030                         {
00031                                 SYSTEM_INFO si;
00032                                 PGNSI pGNSI;
00033                                 pGNSI = (PGNSI) GetProcAddress(GetModuleHandle("kernel32.dll"),"GetNativeSystemInfo");
00034                                 if(NULL != pGNSI) pGNSI(&si);
00035 
00036                                 if( GetSystemMetrics(SM_SERVERR2) ) return OS_WIN32_WINDOWS_SERVER_2003_R2;
00037                                 else
00038                                         if( osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) return OS_WIN32_WINDOWS_XP_64;
00039                                         else return OS_WIN32_WINDOWS_SERVER_2003;
00040                         }
00041 
00042                         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) return OS_WIN32_WINDOWS_XP;
00043                         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) return OS_WIN32_WINDOWS_2000;
00044                         if ( osvi.dwMajorVersion == 4 ) return OS_WIN32_WINDOWS_NT_4_0;
00045                         if ( osvi.dwMajorVersion == 3 && osvi.dwMinorVersion == 51 ) return OS_WIN32_WINDOWS_NT_3_51;
00046                 break;
00047 
00048                 case VER_PLATFORM_WIN32_WINDOWS:
00049                         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) return OS_WIN32_WINDOWS_95;
00050                         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) return OS_WIN32_WINDOWS_98;
00051                         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) return OS_WIN32_WINDOWS_Me;
00052                 break;
00053         }
00054         return OS_ERROR;
00055 }
00056 /*-----------------------------------------------------------------------------------*/

Generated on Sun Mar 4 15:03:44 2007 for Scilab [trunk] by  doxygen 1.5.1