본문 바로가기

language/Information

Window os 버전 구하기

#define OS_VERSION_WIN95 0x01
#define OS_VERSION_WIN98 0x02
#define OS_VERSION_WINME 0x03
#define OS_VERSION_WINXP 0x04
#define OS_VERSION_WINNT 0x05
#define OS_VERSION_WIN2000 0x06
#define OS_VERSION_WIN2003 0x07
#define OS_VERSION_WINNET 0x08
#define OS_VERSION_WINVISTA 0x09

#define OS_VERSION_WIN7    0x0A

BYTE CTest::GetOsVersion()
{
 OSVERSIONINFOEX osvi;
 BOOL bOsVersionInfoEx;
 CString strVer;
 CString ssvp;
 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
   {
      // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
         return OS_VERSION_WINXP;
   }

   switch (osvi.dwPlatformId)
   {
      // Tests for Windows NT product family.
      case VER_PLATFORM_WIN32_NT:

      // Test for the product.

    if ( osvi.dwMajorVersion <= 4 ) {
            //strVer = "Microsoft Windows NT ";
   return OS_VERSION_WINXP;
    }
    
    // Window Vista

    if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) 
    {
            strVer = "Microsoft Windows Vista ";
   return OS_VERSION_WINVISTA;
    }

    // Window 7

    if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 ) 
    {
            strVer = "Microsoft Windows 7 ";
   return OS_VERSION_WIN7;
    }

    if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) {
            strVer = "Microsoft Windows 2000 ";
   return OS_VERSION_WIN2000;
    }

         if( bOsVersionInfoEx )  // Use information from GetVersionEx.
         { 
         // Test for the workstation type.
            if ( osvi.wProductType == VER_NT_WORKSTATION )
            {
    if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) {
                  strVer = "Microsoft Windows XP ";
      return OS_VERSION_WINXP;
    }
    
    if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) {
                  strVer =  strVer+ " Home Edition ";
      return OS_VERSION_WINXP;
    } else {
                  strVer =  strVer+ "Professional " ;
      return OS_VERSION_WINXP;
    }
            }

         // Test for the server type.
            else if ( osvi.wProductType == VER_NT_SERVER )
            {
    if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ) {
                  strVer = "Microsoft Windows .NET ";
      return OS_VERSION_WINNET;
    }
    if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) {
                  strVer =  strVer + "DataCenter Server " ;
      return OS_VERSION_WINNET;
    } 
    else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) {
     if( osvi.dwMajorVersion == 4 ) {
      strVer = strVer +  "Advanced Server " ;
      return OS_VERSION_WINNET;
     }  else {
      strVer = strVer +   "Enterprise Server " ;
      return OS_VERSION_WINNET;
     }
    } else if ( osvi.wSuiteMask == VER_SUITE_BLADE ) {
                  strVer = strVer +   "Web Server " ;
      return OS_VERSION_WINNET;
    } else {
                  strVer = strVer +    "Server " ;
      return OS_VERSION_WINNET;
    }
            }
         }
         else   // Use the registry on early versions of Windows NT.
         {
            HKEY hKey;
            char szProductType[1024];
            DWORD dwBufLen=1024;
            LONG lRet;

            lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
               "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
               0, KEY_QUERY_VALUE, &hKey );
            if( lRet != ERROR_SUCCESS )
                return OS_VERSION_WINXP;

            lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,
               (LPBYTE) szProductType, &dwBufLen);
            if( (lRet != ERROR_SUCCESS) || (dwBufLen > 1024) )
                return OS_VERSION_WINXP;

            RegCloseKey( hKey );

            if ( lstrcmpi( "WINNT", szProductType) == 0 ) {
               strVer =    " Win NT Professional " ;
      return OS_VERSION_WINNT;
   }
            if ( lstrcmpi( "LANMANNT", szProductType) == 0 ) {
               strVer =  " Win NT Server " ;
      return OS_VERSION_WINNT;
   }
            if ( lstrcmpi( "SERVERNT", szProductType) == 0 ) {
               strVer +  " Win NT Advanced Server " ;
    return OS_VERSION_WINNT;
   }
         }

      // Display version, service pack (if any), and build number.

         if ( osvi.dwMajorVersion <= 4 )
         {
            ssvp.Format("version %d.%d %s (Build %d)\n",
               osvi.dwMajorVersion,
               osvi.dwMinorVersion,
               osvi.szCSDVersion,
               osvi.dwBuildNumber & 0xFFFF);
         }
         else
         { 
            ssvp.Format("%s (Build %d)\n",
               osvi.szCSDVersion,
               osvi.dwBuildNumber & 0xFFFF);
         }
         break;

      // Test for the Windows 95 product family.
      case VER_PLATFORM_WIN32_WINDOWS:

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
         {
             strVer = "Microsoft Windows 95 ";
             if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' ) {
                strVer = strVer + "OSR2 " ;
    return OS_VERSION_WIN95;
    }
         }

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
         {
             strVer = "Microsoft Windows 98 ";
             if ( osvi.szCSDVersion[1] == 'A' ) {
                strVer =  strVer + "SE " ;
    return OS_VERSION_WIN98;
    }    
         }

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
         {
             strVer =  strVer +  "Microsoft Windows Millennium Edition ";
    return OS_VERSION_WINME;
         } 
         break;
   }
   return OS_VERSION_WINXP;
}


'language > Information' 카테고리의 다른 글

유저/커널 메로리의 특징  (0) 2013.04.17
메일슬롯(MailSlot) IPC 통신 소스  (0) 2013.04.11
드라이버 공부에 도움되는 링크!  (0) 2012.10.04
OS 버전 구하기  (0) 2012.04.18
윈도우 이벤트  (0) 2011.11.17