Click to Rate and Give Feedback
MSDN
MSDN Library
Development Guides
Windows API
Using the Windows Headers

The header files for the Windows API enable you to create 32- and 64-bit applications. They include declarations for both Unicode and ANSI versions of the API. For more information, see Unicode in the Windows API. They use data types that allow you to build both 32- and 64-bit versions of your application from a single source code base. For more information, see Getting Ready for 64-bit Windows. Additional features include Header Annotations and STRICT Type Checking.

Microsoft Visual C++ includes copies of the Windows header files that were current at the time Visual C++ was released. Therefore, if you install updated header files from an SDK, you may end up with multiple versions of the Windows header files on your computer. If you do not ensure that you are using the latest version of the SDK header files, you will receive the following error code when compiling code that uses features that were introduced after Visual C++ was released: error C2065: undeclared identifier.

Conditional Declarations

Certain functions that depend on a particular version of Windows are declared using conditional code. This enables you to use the compiler to detect whether your application uses functions that are not supported on its target version(s) of Windows. To compile an application that uses these functions, you must define the appropriate macros. Otherwise, you will receive the C2065 error message.

The Windows header files use macros to indicate which versions of Windows support many programming elements. Therefore, you must define these macros to use new functionality introduced in each major operating system release. (Individual header files may use different macros; therefore, if compilation problems occur, check the header file that contains the definition for conditional definitions.) For more information, see SdkDdkver.h.

The following table describes the preferred macros in use by the Windows header files.

Minimum system requiredValue for NTDDI_VERSION
Windows 7NTDDI_WIN7
Windows Server 2008NTDDI_WS08
Windows Vista with Service Pack 1 (SP1)NTDDI_VISTASP1
Windows VistaNTDDI_VISTA
Windows Server 2003 with Service Pack 2 (SP2)NTDDI_WS03SP2
Windows Server 2003 with Service Pack 1 (SP1)NTDDI_WS03SP1
Windows Server 2003NTDDI_WS03
Windows XP with Service Pack 3 (SP3)NTDDI_WINXPSP3
Windows XP with Service Pack 2 (SP2)NTDDI_WINXPSP2
Windows XP with Service Pack 1 (SP1)NTDDI_WINXPSP1
Windows XPNTDDI_WINXP
Windows 2000 with Service Pack 4 (SP4)NTDDI_WIN2KSP4
Windows 2000 with Service Pack 3 (SP3)NTDDI_WIN2KSP3
Windows 2000 with Service Pack 2 (SP2)NTDDI_WIN2KSP2
Windows 2000 with Service Pack 1 (SP1)NTDDI_WIN2KSP1
Windows 2000NTDDI_WIN2K

 

The following tables describe the legacy macros in use by the Windows header files.

Minimum system requiredMinimum value for _WIN32_WINNT and WINVER
Windows 70x0601
Windows Server 20080x0600
Windows Vista0x0600
Windows Server 2003 with SP1, Windows XP with SP20x0502
Windows Server 2003, Windows XP0x0501
Windows 20000x0500

 

Minimum version required Minimum value of _WIN32_IE
Internet Explorer 8.00x0800
Internet Explorer 7.00x0700
Internet Explorer 6.0 SP20x0603
Internet Explorer 6.0 SP10x0601
Internet Explorer 6.00x0600
Internet Explorer 5.50x0550
Internet Explorer 5.010x0501
Internet Explorer 5.0, 5.0a, 5.0b0x0500

 

Note that some features introduced in the latest version of Windows may be added to a service pack for a previous version of Windows. Therefore, to target a service pack, you may need to define _WIN32_WINNT with the value for the next major operating system release. For example, the GetDllDirectory function was introduced in Windows Server 2003 and is conditionally defined if _WIN32_WINNT is 0x0502 or greater. This function was also added to Windows XP with SP1. Therefore, if you were to define _WIN32_WINNT 0x0501 to target Windows XP, you would miss features that are defined in Windows XP with SP1.

You can define these symbols by using the #define statement in each source file, or by specifying the /D compiler option supported by Visual C++. To specify compiler options, go to the Projects menu and click Properties. Go to Configuration Properties, then C++, then Command Line. Enter the option under Additional Options.

Controlling Structure Packing

Projects should be compiled to use the default structure packing, which is currently 8 bytes because the largest integral type is 8 bytes. Doing so ensures that all structure types within the header files are compiled into the application with the same alignment the Windows API expects. It also ensures that structures with 8-byte values are properly aligned and will not cause alignment faults on processors that enforce data alignment.

Faster Builds with Smaller Header Files

You can reduce the size of the Windows header files by excluding some of the less common API declarations as follows:

  • Define WIN32_LEAN_AND_MEAN to exclude APIs such as Cryptography, DDE, RPC, Shell, and Windows Sockets.
  • Define one or more of the NOapi symbols to exclude the API. For example, NOCOMM excludes the serial communication API. For a list of support NOapi symbols, see Windows.h.

See Also

Windows SDK download site

Build date: 7/30/2009

Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
NTDDI_LONGHORN      Kylotan ... MandatoryDefault   |   Edit   |   Show History
There is also NTDDI_LONGHORN, which is defined as NTDDI_VISTA (0x06000000).
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement | Site Feedback
Page view tracker