CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  硬件/系统

在未安装补钉之前,如何判断一个补丁是属于SP几。或补丁号的意义。

楼主dingyongqiang117(真实)2005-01-06 16:37:03 在 VC/MFC / 硬件/系统 提问

在未安装补钉之前,如何判断一个补丁是属于SP几。或补丁号的意义。 问题点数:50、回复次数:7Top

1 楼bobob(静思)回复于 2005-01-06 16:47:52 得分 20

得到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;    
  }Top

2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-01-06 21:53:50 得分 5

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows   NT\CurrentVersionTop

3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-01-06 21:54:19 得分 5

CSDVersion   sp号Top

4 楼NowCan(城市浪人)回复于 2005-01-07 12:40:37 得分 5

老大,你这个和楼主的问题有关吗?Top

5 楼dingyongqiang117(真实)回复于 2005-01-08 11:03:15 得分 0

难道就没有人知道吗?Top

6 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-01-08 14:00:30 得分 5

汗,没看请楼主问题Top

7 楼pepsi1980(这只老鼠不会游泳)回复于 2005-01-10 15:24:39 得分 10

举个例子给你吧  
  MS04-11意思MS是微软的英文缩写,04代表2004年,11代表该安全公告的编号,合起来就是微软2004年的第11个安全公告。  
  Windows   XP-KB823980-x86-CHS32λ.exe假如你看到这个补丁意思是:  
  Windows   XP   产品名称;  
  KB823980   KB是knowledge   base的缩写,即基本知识库   823980是该补丁在微软知识库中的编号  
  x86   处理器平台的标致;  
  CHS32λ.exe   语言版本的标识。CHS代表该补丁应用于中文版本Windows,32表示应用于32位的处理器  
  λ表示该版本是测试版本;  
  我太罗嗦了......Top

相关问题

  • 在未安装补钉之前,如何判断一个补丁是属于SP几。或补丁号的意义。
  • 请问VC的sp补丁是什么?如何知道当前打到哪个版本的补丁了?
  • 求ADO两个补丁的序列号,加分。
  • C++ Builder 5补丁升级程序的序列号是什么?
  • 请问:DELPHI5的补丁D5EntUpdate的序列号?
  • 我需要Delphi6两个补丁的注册号,谢谢大家
  • 有delphi6补丁 delphi7补丁
  • 在Delphi5.0中安装ADO补丁时为什么输入序列号不对?
  • 望各位先生教我:::怎么样得到操作系统补丁号?????
  • 我更新了BCB2006的补丁,需要序列号了,谁找到了吗?

关键词

  • win32
  • osvi
  • 补丁
  • osversioninfoex
  • osversioninfo
  • dwminorversion
  • getversionex
  • dwmajorversion
  • family
  • sizeof

得分解答快速导航

  • 帖主:dingyongqiang117
  • bobob
  • oyljerry
  • oyljerry
  • NowCan
  • oyljerry
  • pepsi1980

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo