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.h의 Windows 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, SPVER 및 SUBVER 매크로를 사용하여 다양한 수준의 API 지원에 대한 조건부 컴파일을 제어할 수 있습니다.
보고 있는 sdkddkver.h에 나열된 이러한 Windows 버전이 모두 표시되지 않을 수 있습니다. 즉, 이전 버전의 Windows SDK를 사용 중일 수 있습니다. (더 많은 항목이 표시되면 최신 버전의 SDK를 보고 있을 것입니다.) 기본적으로 Visual Studio의 새 Windows 프로젝트는 Visual Studio와 함께 제공되는 최신 Windows SDK를 사용합니다. 별도로 설치한 최신 SDK를 사용하려면 프로젝트 속성에서 Windows SDK를 명시적으로 설정해야 합니다.
참고 항목
내부 MFC 헤더를 애플리케이션에 포함하는 경우에는 값 작동 여부가 보장되지 않습니다.
/D
컴파일러 옵션을 사용하여 이 매크로를 정의할 수도 있습니다. 자세한 내용은 /D (Preprocessor Definitions)을 참조하세요.
이러한 매크로의 의미에 대한 자세한 내용은 Windows 헤더 사용을 참조하세요.