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

# 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