WINVER 및 _WIN32_WINNT 업데이트

Windows SDK를 사용하는 경우 코드를 실행할 수 있는 Windows 버전을 지정할 수 있습니다. 전처리기 매크로 WINVER_WIN32_WINNT 코드에서 지원하는 최소 운영 체제 버전을 지정합니다. Visual Studio 및 Microsoft C++ 컴파일러는 Windows 7 SP1 이상을 대상으로 지원합니다. 이전 도구 집합에는 Windows XP SP2, Windows Server 2003 SP1, Vista 및 Windows Server 2008에 대한 지원이 포함됩니다. Windows 95, Windows 98, Windows ME, Windows NT 및 Windows 2000은 지원되지 않습니다.

이전 프로젝트를 업그레이드할 때 WINVER 또는 _WIN32_WINNT 매크로를 업데이트해야 할 수 있습니다. 지원되지 않는 버전의 Windows에 대한 값이 할당된 경우 이러한 매크로와 관련된 컴파일 오류가 표시될 수 있습니다.

설명

매크로를 수정하려면 헤더 파일(예: Windows를 대상으로 하는 일부 프로젝트 템플릿에 포함된 targetver.h)에 다음 줄을 추가합니다.

#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

예제의 매크로는 Windows 10 운영 체제의 모든 버전을 대상으로 설정됩니다. 가능한 값은 각 주요 Windows 버전에 대한 매크로를 정의하는 Windows 헤더 파일 sdkddkver.h에 나열됩니다. 이전 Windows 플랫폼을 지원하는 애플리케이션을 빌드하려면 WinSDKVer.h를 포함합니다. 그런 다음, sdkddkver.h를 포함하기 전에 WINVER_WIN32_WINNT 매크로를 지원되는 가장 오래된 플랫폼으로 설정합니다. 다음은 Windows의 각 주 버전에 대한 값을 인코딩하는 sdkddkver.hWindows 10 SDK 버전에서 제공하는 줄입니다.

//
// _WIN32_WINNT version constants
//
#define _WIN32_WINNT_NT4                    0x0400 // Windows NT 4.0
#define _WIN32_WINNT_WIN2K                  0x0500 // Windows 2000
#define _WIN32_WINNT_WINXP                  0x0501 // Windows XP
#define _WIN32_WINNT_WS03                   0x0502 // Windows Server 2003
#define _WIN32_WINNT_WIN6                   0x0600 // Windows Vista
#define _WIN32_WINNT_VISTA                  0x0600 // Windows Vista
#define _WIN32_WINNT_WS08                   0x0600 // Windows Server 2008
#define _WIN32_WINNT_LONGHORN               0x0600 // Windows Vista
#define _WIN32_WINNT_WIN7                   0x0601 // Windows 7
#define _WIN32_WINNT_WIN8                   0x0602 // Windows 8
#define _WIN32_WINNT_WINBLUE                0x0603 // Windows 8.1
#define _WIN32_WINNT_WINTHRESHOLD           0x0A00 // Windows 10
#define _WIN32_WINNT_WIN10                  0x0A00 // Windows 10
// . . .

버전 관리 방법에 대한 보다 세분화된 접근 방식을 위해 sdkddkver.h에서 NTDDI 버전 상수를 사용할 수 있습니다. 다음은 Windows 10 SDK 버전 10.0.18362.0에서 sdkddkver.h로 정의된 몇 가지 매크로입니다.

//
// NTDDI version constants
//
#define NTDDI_WIN7                          0x06010000
#define NTDDI_WIN8                          0x06020000
#define NTDDI_WINBLUE                       0x06030000
#define NTDDI_WINTHRESHOLD                  0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10                         0x0A000000  /* ABRACADABRA_THRESHOLD */
#define NTDDI_WIN10_TH2                     0x0A000001  /* ABRACADABRA_WIN10_TH2 */
#define NTDDI_WIN10_RS1                     0x0A000002  /* ABRACADABRA_WIN10_RS1 */
#define NTDDI_WIN10_RS2                     0x0A000003  /* ABRACADABRA_WIN10_RS2 */
#define NTDDI_WIN10_RS3                     0x0A000004  /* ABRACADABRA_WIN10_RS3 */
#define NTDDI_WIN10_RS4                     0x0A000005  /* ABRACADABRA_WIN10_RS4 */
#define NTDDI_WIN10_RS5                     0x0A000006  /* ABRACADABRA_WIN10_RS5 */
#define NTDDI_WIN10_19H1                    0x0A000007  /* ABRACADABRA_WIN10_19H1*/

#define WDK_NTDDI_VERSION                   NTDDI_WIN10_19H1 /* ABRACADABRA_WIN10_19H1 */

//
// masks for version macros
//
#define OSVERSION_MASK      0xFFFF0000
#define SPVERSION_MASK      0x0000FF00
#define SUBVERSION_MASK     0x000000FF

//
// macros to extract various version fields from the NTDDI version
//
#define OSVER(Version)  ((Version) & OSVERSION_MASK)
#define SPVER(Version)  (((Version) & SPVERSION_MASK) >> 8)
#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )

코드에서 OSVER, SPVERSUBVER 매크로를 사용하여 다양한 수준의 API 지원에 대한 조건부 컴파일을 제어할 수 있습니다.

보고 있는 sdkddkver.h나열된 이러한 Windows 버전이 모두 표시되지 않을 수 있습니다. 즉, 이전 버전의 Windows SDK를 사용 중일 수 있습니다. (더 많은 항목이 표시되면 최신 버전의 SDK를 보고 있을 것입니다.) 기본적으로 Visual Studio의 새 Windows 프로젝트는 Visual Studio와 함께 제공되는 최신 Windows SDK를 사용합니다. 별도로 설치한 최신 SDK를 사용하려면 프로젝트 속성에서 Windows SDK를 명시적으로 설정해야 합니다.

참고 항목

내부 MFC 헤더를 애플리케이션에 포함하는 경우에는 값 작동 여부가 보장되지 않습니다.

/D 컴파일러 옵션을 사용하여 이 매크로를 정의할 수도 있습니다. 자세한 내용은 /D (Preprocessor Definitions)을 참조하세요.

이러한 매크로의 의미에 대한 자세한 내용은 Windows 헤더 사용을 참조하세요.

참고 항목

Visual C++ 변경 기록