Pages

Tuesday, May 29, 2012

C++ targetver.h

What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?

#define WINVER         0x0400
#define _WIN32_WINNT   0x0400
#define _WIN32_WINDOWS 0x0400
#define _WIN32_IE      0x0400

Let's take them in order.

The WINVER symbol is the earliest one. That's the symbol that 16-bit Windows used to control the versioning of its header files, and its use carried forward into the 32-bit header files, presumably from the people who did the initial conversion of the header files to 32-bit and who grew up with the WINVER symbol. This symbol is still used a lot in the header files that can trace their origins to 16-bit Windows, such as winuser.h, wingdi.h, and mmsystem.h.

The _WIN32_WINNT symbol came next. I'm not sure where it came from, but from its name it probably was invented by the Windows NT team in order to allow them to block off sections of the header file that are available only in the Windows NT implementation of Win32. Don't forget that in the early days, there was also Win32s, a subset of Win32 that could run on 16-bit Windows 3.1. The single WINVER symbol wasn't enough to specify exactly what you wanted to be compatible with. For example, a function available only in Windows NT 3.1 would be guarded with #if _WIN32_WINNT >= 0x030A so that programs that wanted to run on Win32s could set _WIN32_WINNT to zero and keep that function off-limits.

Similarly, both Windows 95 and Windows NT 4 identified themselves as Windows major version 4, so the WINVER symbol was insufficient to distinguish them. Functions that existed in Windows NT 4 but not in Window 95 were therefore guarded with _WIN32_WINNT.

On the other hand, there were also functions that were first introduced in Windows 95 and did not exist in the original version of Windows NT 4. The _WIN32_WINDOWS symbol let you specify that you wanted access to stuff that was new for Windows 95 and which would also be ported to Windows NT 4 and future versions of Windows NT. 
 


Continue Reading... 
 



Minimum system required                 Value for NTDDI_VERSION
Windows 7                               NTDDI_WIN7     (0x06010000)
Windows Server 2008                     NTDDI_WS08     (0x06000100)
Windows Vista (SP1)                     NTDDI_VISTASP1 (0x06000100)
Windows Vista                           NTDDI_VISTA    (0x06000000)
Windows Server 2003 (SP2)               NTDDI_WS03SP2  (0x05020200)
Windows Server 2003 (SP1)               NTDDI_WS03SP1  (0x05020100)
Windows Server 2003                     NTDDI_WS03     (0x05020000)
Windows XP (SP3)                        NTDDI_WINXPSP3 (0x05010300)
Windows XP (SP2)                        NTDDI_WINXPSP2 (0x05010200)
Windows XP (SP1)                        NTDDI_WINXPSP1 (0x05010100)
Windows XP                              NTDDI_WINXP    (0x05010000)
Windows 2000(SP4)                       NTDDI_WIN2KSP4 (0x05000400)
Windows 2000(SP3)                       NTDDI_WIN2KSP3 (0x05000300)
Windows 2000(SP2)                       NTDDI_WIN2KSP2 (0x05000200)
Windows 2000(SP1)                       NTDDI_WIN2KSP1 (0x05000100)
Windows 2000                            NTDDI_WIN2K    (0x05000000)



Minimum system required    value for _WIN32_WINNT and WINVER
Windows 7                  _WIN32_WINNT_WIN7  (0x0601)
Windows Server 2008        _WIN32_WINNT_WS08  (0x0600)
Windows Vista              _WIN32_WINNT_VISTA (0x0600)

Windows Server 2003 (SP1), _WIN32_WINNT_WS03  (0x0502)
Windows XP with SP2

Windows Server 2003,       _WIN32_WINNT_WINXP (0x0501)
Windows XP

Windows 2000               _WIN32_WINNT_WIN2K (0x0500)


Minimum version required     value of _WIN32_IE
Internet Explorer 8.0        _WIN32_IE_IE80    (0x0800)
Internet Explorer 7.0        _WIN32_IE_IE70    (0x0700)
Internet Explorer 6.0 SP2    _WIN32_IE_IE60SP2 (0x0603)
Internet Explorer 6.0 SP1    _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0        _WIN32_IE_IE60    (0x0600)
Internet Explorer 5.5        _WIN32_IE_IE55    (0x0550)
Internet Explorer 5.01       _WIN32_IE_IE501   (0x0501)
Internet Explorer 5.0,       _WIN32_IE_IE50    (0x0500)
5.0a,
5.0b   

No comments:

Post a Comment