得到windows的版本号,以及补丁

得到windows的版本号,以及补丁  
  #include   <windows.h>  
  #include   <stdio.h>  
   
  #define   BUFSIZE   80  
   
  int   main()  
  {  
        OSVERSIONINFOEX   osvi;  
        BOOL   bOsVersionInfoEx;  
   
        //   Try   calling   GetVersionEx   using   the   OSVERSIONINFOEX   structure.  
        //   If   that   fails,   try   using   the   OSVERSIONINFO   structure.  
   
        ZeroMemory(&osvi,   sizeof(OSVERSIONINFOEX));  
        osvi.dwOSVersionInfoSize   =   sizeof(OSVERSIONINFOEX);  
   
        if(   !(bOsVersionInfoEx   =   GetVersionEx   ((OSVERSIONINFO   *)   &osvi))   )  
        {  
              osvi.dwOSVersionInfoSize   =   sizeof   (OSVERSIONINFO);  
              if   (!   GetVersionEx   (   (OSVERSIONINFO   *)   &osvi)   )    
                    return   FALSE;  
        }  
   
        switch   (osvi.dwPlatformId)  
        {  
              //   Test   for   the   Windows   NT   product   family.  
              case   VER_PLATFORM_WIN32_NT:  
   
                    //   Test   for   the   specific   product   family.  
                    if   (   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   2   )  
                          printf   ("Microsoft   Windows&nbsp;.NET   Server&nbsp;2003   family,   ");  
   
                    if   (   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   1   )  
                          printf   ("Microsoft   Windows   XP   ");  
   
                    if   (   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   0   )  
                          printf   ("Microsoft   Windows   2000   ");  
   
                    if   (   osvi.dwMajorVersion   <=   4   )  
                          printf("Microsoft   Windows   NT   ");  
   
                    //   Test   for   specific   product   on   Windows   NT   4.0   SP6   and   later.  
                    if(   bOsVersionInfoEx   )  
                    {  
                          //   Test   for   the   workstation   type.  
                          if   (   osvi.wProductType   ==   VER_NT_WORKSTATION   )  
                          {  
                                if(   osvi.dwMajorVersion   ==   4   )  
                                      printf   (   "Workstation   4.0   "   );  
                                else   if(   osvi.wSuiteMask   &   VER_SUITE_PERSONAL   )  
                                      printf   (   "Home   Edition   "   );  
                                else  
                                      printf   (   "Professional   "   );  
                          }  
                           
                          //   Test   for   the   server   type.  
                          else   if   (   osvi.wProductType   ==   VER_NT_SERVER   )  
                          {  
                                if(   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   2   )  
                                {  
                                      if(   osvi.wSuiteMask   &   VER_SUITE_DATACENTER   )  
                                            printf   (   "Datacenter   Edition   "   );  
                                      else   if(   osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE   )  
                                            printf   (   "Enterprise   Edition   "   );  
                                      else   if   (   osvi.wSuiteMask   ==   VER_SUITE_BLADE   )  
                                            printf   (   "Web   Edition   "   );  
                                      else  
                                            printf   (   "Standard   Edition   "   );  
                                }  
   
                                else   if(   osvi.dwMajorVersion   ==   5   &&   osvi.dwMinorVersion   ==   0   )  
                                {  
                                      if(   osvi.wSuiteMask   &   VER_SUITE_DATACENTER   )  
                                            printf   (   "Datacenter   Server   "   );  
                                      else   if(   osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE   )  
                                            printf   (   "Advanced   Server   "   );  
                                      else  
                                            printf   (   "Server   "   );  
                                }  
   
                                else     //   Windows   NT   4.0    
                                {  
                                      if(   osvi.wSuiteMask   &   VER_SUITE_ENTERPRISE   )  
                                            printf   ("Server   4.0,   Enterprise   Edition   "   );  
                                      else  
                                            printf   (   "Server   4.0   "   );  
                                }  
                          }  
                    }  
                    else     //   Test   for   specific   product   on   Windows   NT   4.0   SP5   and   earlier  
                    {  
                          HKEY   hKey;  
                          char   szProductType[BUFSIZE];  
                          DWORD   dwBufLen=BUFSIZE;  
                          LONG   lRet;  
   
                          lRet   =   RegOpenKeyEx(   HKEY_LOCAL_MACHINE,  
                                "SYSTEM//CurrentControlSet//Control//ProductOptions",  
                                0,   KEY_QUERY_VALUE,   &hKey   );  
                          if(   lRet   !=   ERROR_SUCCESS   )  
                                return   FALSE;  
   
                          lRet   =   RegQueryValueEx(   hKey,   "ProductType",   NULL,   NULL,  
                                (LPBYTE)   szProductType,   &dwBufLen);  
                          if(   (lRet   !=   ERROR_SUCCESS)   ||   (dwBufLen   >   BUFSIZE)   )  
                                return   FALSE;  
   
                          RegCloseKey(   hKey   );  
   
                          if   (   lstrcmpi(   "WINNT",   szProductType)   ==   0   )  
                                printf(   "Workstation   "   );  
                          if   (   lstrcmpi(   "LANMANNT",   szProductType)   ==   0   )  
                                printf(   "Server   "   );  
                          if   (   lstrcmpi(   "SERVERNT",   szProductType)   ==   0   )  
                                printf(   "Advanced   Server   "   );  
   
                          printf(   "%d.%d   ",   osvi.dwMajorVersion,   osvi.dwMinorVersion   );  
                    }  
   
              //   Display   service   pack   (if   any)   and   build   number.  
   
                    if(   osvi.dwMajorVersion   ==   4   &&    
                            lstrcmpi(   osvi.szCSDVersion,   "Service   Pack   6"   )   ==   0   )  
                    {  
                          HKEY   hKey;  
                          LONG   lRet;  
   
                          //   Test   for   SP6   versus   SP6a.  
                          lRet   =   RegOpenKeyEx(   HKEY_LOCAL_MACHINE,  
                                "SOFTWARE//Microsoft//Windows   NT//CurrentVersion//Hotfix//Q246009",  
                                0,   KEY_QUERY_VALUE,   &hKey   );  
                          if(   lRet   ==   ERROR_SUCCESS   )  
                                printf(   "Service   Pack   6a   (Build   %d)/n",   osvi.dwBuildNumber   &   0xFFFF   );                    
                          else   //   Windows   NT   4.0   prior   to   SP6a  
                          {  
                                printf(   "%s   (Build   %d)/n",  
                                      osvi.szCSDVersion,  
                                      osvi.dwBuildNumber   &   0xFFFF);  
                          }  
   
                          RegCloseKey(   hKey   );  
                    }  
                    else   //   Windows   NT   3.51   and   earlier   or   Windows   2000   and   later  
                    {  
                          printf(   "%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)  
                    {  
                            printf   ("Microsoft   Windows   95   ");  
                            if   (   osvi.szCSDVersion[1]   ==   'C'   ||   osvi.szCSDVersion[1]   ==   'B'   )  
                                  printf("OSR2   "   );  
                    }    
   
                    if   (osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   10)  
                    {  
                            printf   ("Microsoft   Windows   98   ");  
                            if   (   osvi.szCSDVersion[1]   ==   'A'   )  
                                  printf("SE   "   );  
                    }    
   
                    if   (osvi.dwMajorVersion   ==   4   &&   osvi.dwMinorVersion   ==   90)  
                    {  
                            printf   ("Microsoft   Windows   Millennium   Edition/n");  
                    }    
                    break;  
   
              case   VER_PLATFORM_WIN32s:  
   
                    printf   ("Microsoft   Win32s/n");  
                    break;  
        }  
        return   TRUE;    
  } 

 

 

 

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/HotFix

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall

对于这些使用reg query看看能不能查询成功即可判断是否安装了某个补丁了,另外使用systeminfo命令也可以列出已安装补丁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值