メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcOS.c

説明を見る。
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         //というかWindows3.1使う馬鹿いないし…また、
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 //#undef    OSVERSIONINFOEX
00105 //#define OSVERSIONINFOEX DKC_OSVERSIONINFOEX   
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) {        // GetVersionEx 関数からの情報を使う
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 {      // 初期の Windows NT では、レジストリを使う
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     }//end of switch
00219 
00220     if(Extension){
00221         *Extension = ext;
00222     }
00223 
00224     return result;
00225 }
00226 
00227 //#undef    OSVERSIONINFOEX
00228 #endif
00229 
00230 
00231 #endif

dkutil_cに対してMon Jan 16 00:39:49 2006に生成されました。  doxygen 1.4.4