关于系统版本判断的一些知识

#include <windows.h> #include <stdio.h> BOOL DisplaySystemVersion() { 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))) { //If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if(!GetVersionEx( ( OSVERSIONINFO*)&osvi)) return FALSE; } switch(osvi.dwPlatformId) { //Tests for Windows NT product family. case VER_PLATFORM_WIN32_NT : //Test for the product. if( osvi.dwMajorVersion <= 4 ) printf("Microsoft Windows NT "); if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) printf("Microsoft Windows 2000 "); if( bOsVersionInfoEx )//Use information from GetVersionEx. { //Test for the workstation type. if( osvi.wProductType == VER_NT_WORKSTATION ) { if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) printf("Microsoft Windows XP "); 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 == 1) printf("Microsoft Windows .NET "); if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) printf("DataCenter Server "); else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) if( osvi.dwMajorVersion == 4 ) printf("Advanced Server "); else printf("Enterprise Server " ); else if( osvi.wSuiteMask == VER_SUITE_BLADE ) printf("Web Server "); else printf("Server "); } } else //Use the registry on early versions of Windows NT. { HKEY hKey; char szProductType[80]; DWORD dwBufLen; RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM//CurrentControlSet//Control//ProductOptions", 0, KEY_QUERY_VALUE, &hKey ); RegQueryValueEx( hKey, "ProductType", NULL, NULL, (LPBYTE)szProductType, &dwBufLen ); RegCloseKey( hKey ); if( lstrcmpi( "WINNT", szProductType) == 0 ) printf( "Professional" ); if( lstrcmpi( "LANMANNT", szProductType) == 0 ) printf( "Server "); if( lstrcmpi( "SERVERNT", szProductType) == 0 ) printf( "Advanced Server" ); } //Display version, service pack (if any), and build number. if( osvi.dwMajorVersion <= 4 ) { printf( "version %d.%d %s (Build %d)/n", osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF); } else { 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 9 " ); 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" ); } break; } return TRUE; }

Operating systemVersion numberdwMajorVersiondwMinorVersionOther
Windows76.161

OSVERIONINFOEX.wProductType == VER_NT_WORKSTATION

Windows Server2008R26.161

OSVERIONINFOEX.wProductType != VER_NT_WORKSTATION

Windows Server20086.060

OSVERIONINFOEX.wProductType != VER_NT_WORKSTATION

WindowsVista6.060

OSVERIONINFOEX.wProductType == VER_NT_WORKSTATION

Windows Server2003 R25.252GetSystemMetrics(SM_SERVERR2) != 0
Windows Server20035.252GetSystemMetrics(SM_SERVERR2) == 0
WindowsXP5.151Not applicable
Windows20005.050Not applicable

typedef struct _OSVERSIONINFO { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[128];} OSVERSIONINFO;

dwOSVersionInfoSize

The size of this data structure, in bytes. Set this member to sizeof(OSVERSIONINFO).

dwMajorVersion

The major version number of the operating system. For more information, see Remarks.

dwMinorVersion

The minor version number of the operating system. For more information, see Remarks.

dwBuildNumber

The build number of the operating system.

dwPlatformId

The operating system platform. This member can be the following value.

ValueMeaning
VER_PLATFORM_WIN32_NT2

The operating system is Windows Server2008, WindowsVista, Windows Server2003, WindowsXP, or Windows2000.

szCSDVersion

A null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.

typedef struct _OSVERSIONINFOEX { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[128]; WORD wServicePackMajor; WORD wServicePackMinor; WORD wSuiteMask; BYTE wProductType; BYTE wReserved;} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;

dwOSVersionInfoSize

The size of this data structure, in bytes. Set this member to sizeof(OSVERSIONINFOEX).

dwMajorVersion

The major version number of the operating system. For more information, see Remarks.

dwMinorVersion

The minor version number of the operating system. For more information, see Remarks.

dwBuildNumber

The build number of the operating system.

dwPlatformId

The operating system platform. This member can be VER_PLATFORM_WIN32_NT (2).

szCSDVersion

A null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.

wServicePackMajor

The major version number of the latest Service Pack installed on the system. For example, for Service Pack 3, the major version number is 3. If no Service Pack has been installed, the value is zero.

wServicePackMinor

The minor version number of the latest Service Pack installed on the system. For example, for Service Pack 3, the minor version number is 0.

wSuiteMask

A bit mask that identifies the product suites available on the system. This member can be a combination of the following values.

ValueMeaning
VER_SUITE_BACKOFFICE 0x00000004

Microsoft BackOffice components are installed.

VER_SUITE_BLADE 0x00000400

Windows Server2003, Web Edition is installed.

VER_SUITE_COMPUTE_SERVER 0x00004000

Windows Server2003, Compute Cluster Edition is installed.

VER_SUITE_DATACENTER 0x00000080

Windows Server2008 Datacenter, Windows Server2003, Datacenter Edition, or Windows2000 Datacenter Server is installed.

VER_SUITE_ENTERPRISE 0x00000002

Windows Server2008 Enterprise, Windows Server2003, Enterprise Edition, or Windows2000 Advanced Server is installed. Refer to the Remarks section for more information about this bit flag.

VER_SUITE_EMBEDDEDNT 0x00000040

WindowsXP Embedded is installed.

VER_SUITE_PERSONAL 0x00000200

WindowsVista Home Premium, WindowsVista Home Basic, or WindowsXP Home Edition is installed.

VER_SUITE_SINGLEUSERTS 0x00000100

Remote Desktop is supported, but only one interactive session is supported. This value is set unless the system is running in application server mode.

VER_SUITE_SMALLBUSINESS 0x00000001

Microsoft Small Business Server was once installed on the system, but may have been upgraded to another version of Windows. Refer to the Remarks section for more information about this bit flag.

VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020

Microsoft Small Business Server is installed with the restrictive client license in force. Refer to the Remarks section for more information about this bit flag.

VER_SUITE_STORAGE_SERVER 0x00002000

Windows Storage Server2003 R2 or Windows Storage Server2003is installed.

VER_SUITE_TERMINAL 0x00000010

Terminal Services is installed. This value is always set.

If VER_SUITE_TERMINAL is set but VER_SUITE_SINGLEUSERTS is not set, the system is running in application server mode.

VER_SUITE_WH_SERVER 0x00008000

Windows Home Server is installed.

wProductType

Any additional information about the system. This member can be one of the following values.

ValueMeaning
VER_NT_DOMAIN_CONTROLLER 0x0000002

The system is a domain controller and the operating system is Windows Server2008, Windows Server2003, or Windows2000 Server.

VER_NT_SERVER 0x0000003

The operating system is Windows Server2008, Windows Server2003, or Windows2000 Server.

Note that a server that is also a domain controller is reported as VER_NT_DOMAIN_CONTROLLER, not VER_NT_SERVER.

VER_NT_WORKSTATION 0x0000001

The operating system is WindowsVista, WindowsXP Professional, WindowsXP Home Edition, or Windows2000 Professional.

wReserved

Reserved for future use.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值