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 を明示的に設定する必要があります。
Note
アプリケーションに内部 MFC ヘッダーを含めた場合には、値が動作する保証はありません。
/D
コンパイラ オプションを使用して、このマクロを定義することもできます。 詳細については、「 /D (Preprocessor Definitions)」を参照してください。
これらのマクロの意味について詳しくは、「 Windows ヘッダーの使用」をご覧ください。