00001
00002 #define DKUTIL_C_OS_C
00003 #include "dkcOS.h"
00004
00005 #ifdef WIN32
00006
00007 int WINAPI dkcGetOSVersion(){
00008 int r = -1;
00009 OSVERSIONINFO os;
00010 os.dwOSVersionInfoSize=sizeof(os);
00011
00012
00013 if(GetVersionEx(&os)==0)
00014 goto End;
00015
00016 if(os.dwMajorVersion<=3){
00017
00018
00019 if(os.dwMinorVersion==51){
00020 r = enuWindowsNT3_51;
00021 goto End;
00022 }
00023 if(os.dwPlatformId==VER_PLATFORM_WIN32s){
00024 r = enuWindows3_1;
00025 goto End;
00026 }
00027 }
00028
00029 switch(os.dwPlatformId){
00030 case VER_PLATFORM_WIN32s:
00031 r = enuWindows3_1;
00032 break;
00033
00034 case VER_PLATFORM_WIN32_WINDOWS:
00035 if(os.dwMajorVersion >=4)
00036 {
00037 if(os.dwMinorVersion<10){
00038 r = enuWindows95;
00039 goto End;
00040 }
00041 if(os.dwMinorVersion<90){
00042 r = enuWindows98;
00043 goto End;
00044 }
00045
00046 if(os.dwMinorVersion>=90){
00047 r = enuWindowsMe;
00048 goto End;
00049 }else{
00050 r = -2;
00051 goto End;
00052 }
00053 }
00054 if(os.dwMajorVersion==5){
00055
00056 if(os.dwMinorVersion==0){
00057 r = enuWindows2000;
00058 goto End;
00059 }
00060 if(os.dwMinorVersion>0){
00061 r = enuWindowsXP;
00062 goto End;
00063 }else{
00064 r = -2;
00065 goto End;
00066 }
00067 }
00068 break;
00069
00070
00071 case VER_PLATFORM_WIN32_NT:
00072 if(os.dwMajorVersion==4)
00073 r = enuWindowsNT4_0;
00074
00075 if(os.dwMajorVersion==5){
00076 if(os.dwMinorVersion==0)
00077 r = enuWindows2000;
00078 if(os.dwMinorVersion>0){
00079 r = enuWindowsXP;
00080 }
00081 else{
00082 return -2;
00083 }
00084 }
00085 return -2;
00086 break;
00087 default:
00088 return -2;
00089 break;
00090 }
00091 End:
00092 return r;
00093 }
00094
00095 DKC_INLINE BOOL dkcIsOS9x(){
00096 int r = dkcGetOSVersion();
00097 return (r==enuWindows98 || r == enuWindows95 || r==enuWindowsMe);
00098 }
00099
00100 DKC_INLINE BOOL dkcIsOSNT(){
00101 return !dkcIsOS9x();
00102 }
00103
00104
00105
00106
00107 #if (_MSC_VER > 1200)
00108
00109 int WINAPI dkcGetOSVersionEx(int *Extension)
00110 {
00111 int result=-1;
00112 int ext=0;
00113 OSVERSIONINFOEX osvi={0};
00114 BOOL SucceededFlag=FALSE;
00115
00116
00117 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
00118
00119 SucceededFlag = GetVersionEx((OSVERSIONINFO *)&osvi);
00120 if (!SucceededFlag) {
00121 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
00122 if(!GetVersionEx((OSVERSIONINFO *)&osvi)){
00123 return -1;
00124 }
00125 }
00126
00127 switch (osvi.dwPlatformId)
00128 {
00129 case VER_PLATFORM_WIN32_NT:
00130 if (osvi.dwMajorVersion <= 4) {
00131 result = enuWindowsNT4_0;
00132 }
00133
00134 if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) {
00135 result = enuWindows2000;
00136 }
00137 if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1){
00138 result = enuWindowsXP;
00139 }
00140 if (SucceededFlag) {
00141 if (osvi.wProductType == VER_NT_WORKSTATION) {
00142
00143 if (osvi.wSuiteMask & VER_SUITE_PERSONAL) {
00144 ext = edkOSE_HomeEdition;
00145 }else {
00146 ext = edkOSE_Professional;
00147 }
00148 }else if (osvi.wProductType == VER_NT_SERVER) {
00149 if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) {
00150 result = enuWindows_NET;
00151 }
00152
00153 if (osvi.wSuiteMask & VER_SUITE_DATACENTER) {
00154 ext = edkOSE_DataCenter_Server;
00155 }else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) {
00156 if( osvi.dwMajorVersion == 4 ) {
00157 ext = edkOSE_Advanced_Server;
00158 }
00159 else {
00160 ext = edkOSE_Enterprise_Server;
00161 }
00162 }
00163 else if (osvi.wSuiteMask == VER_SUITE_BLADE) {
00164 ext = edkOSE_Web_Server;
00165 }
00166 else {
00167 ext = edkOSE_Server;
00168 }
00169 }
00170 }
00171 else {
00172 HKEY hKey;
00173 char szProductType[80];
00174 DWORD dwBufLen;
00175
00176 RegOpenKeyEx(HKEY_LOCAL_MACHINE,
00177 "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
00178 0, KEY_QUERY_VALUE, &hKey );
00179 RegQueryValueEx(hKey, "ProductType", NULL, NULL,
00180 (LPBYTE)szProductType, &dwBufLen);
00181 RegCloseKey(hKey);
00182
00183 if (lstrcmpi("WINNT", szProductType) == 0) {
00184 ext= edkOSE_Professional;
00185 }
00186 if (lstrcmpi("LANMANNT", szProductType) == 0) {
00187 ext = edkOSE_Server;
00188 }
00189 if (lstrcmpi( "SERVERNT", szProductType) == 0) {
00190 ext = edkOSE_Advanced_Server;
00191 }
00192 }
00193
00194 break;
00195
00196 case VER_PLATFORM_WIN32_WINDOWS:
00197 if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) {
00198 result = enuWindows95;
00199 if (osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B') {
00200 ext = edkOSE_OSR2;
00201 }
00202 }
00203
00204 if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) {
00205 result = enuWindows98;
00206 if (osvi.szCSDVersion[1] == 'A') {
00207 ext = enuOSE_SE;
00208 }
00209 }
00210
00211 if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) {
00212 result = enuWindowsME;
00213 }
00214
00215 break;
00216 default:
00217 return -1;
00218 }
00219
00220 if(Extension){
00221 *Extension = ext;
00222 }
00223
00224 return result;
00225 }
00226
00227
00228 #endif
00229
00230
00231 #endif