1 /* 2 * Copyright 2013, 2017 Andrey Semashev 3 * Copyright 2017 James E. King, III 4 * 5 * Distributed under the Boost Software License, Version 1.0. 6 * See http://www.boost.org/LICENSE_1_0.txt 7 */ 8 9 #ifndef BOOST_WINAPI_CONFIG_HPP_INCLUDED_ 10 #define BOOST_WINAPI_CONFIG_HPP_INCLUDED_ 11 12 #include <boost/predef/version_number.h> 13 #include <boost/predef/platform.h> 14 #if defined(__CYGWIN__) 15 // Cygwin 64 compiler does not define _WIN64 and instead defines it in a private header. We can't define _WIN64 ourselves because 16 // the header defines the macro unconditionally and if the user includes both Boost.WinAPI and Cygwin WinAPI headers there will be conflict. 17 #include <_cygwin.h> 18 #endif 19 20 // BOOST_WINAPI_IS_MINGW indicates that the target Windows SDK is provided by MinGW (http://mingw.org/). 21 // BOOST_WINAPI_IS_MINGW_W64 indicates that the target Windows SDK is provided by MinGW-w64 (http://mingw-w64.org). 22 // BOOST_WINAPI_IS_CYGWIN indicates that the target Windows SDK is provided by MinGW variant from Cygwin (https://cygwin.com/). 23 #if defined(__CYGWIN__) 24 #define BOOST_WINAPI_IS_CYGWIN 25 #elif BOOST_PLAT_MINGW 26 #if defined(__MINGW64_VERSION_MAJOR) 27 #define BOOST_WINAPI_IS_MINGW_W64 28 #else 29 #define BOOST_WINAPI_IS_MINGW 30 #endif 31 #endif 32 33 // These constants reflect _WIN32_WINNT_* macros from sdkddkver.h 34 // See also: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#setting_winver_or__win32_winnt 35 #define BOOST_WINAPI_VERSION_NT4 0x0400 36 #define BOOST_WINAPI_VERSION_WIN2K 0x0500 37 #define BOOST_WINAPI_VERSION_WINXP 0x0501 38 #define BOOST_WINAPI_VERSION_WS03 0x0502 39 #define BOOST_WINAPI_VERSION_WIN6 0x0600 40 #define BOOST_WINAPI_VERSION_VISTA 0x0600 41 #define BOOST_WINAPI_VERSION_WS08 0x0600 42 #define BOOST_WINAPI_VERSION_LONGHORN 0x0600 43 #define BOOST_WINAPI_VERSION_WIN7 0x0601 44 #define BOOST_WINAPI_VERSION_WIN8 0x0602 45 #define BOOST_WINAPI_VERSION_WINBLUE 0x0603 46 #define BOOST_WINAPI_VERSION_WINTHRESHOLD 0x0A00 47 #define BOOST_WINAPI_VERSION_WIN10 0x0A00 48 49 // These constants reflect NTDDI_* macros from sdkddkver.h 50 #define BOOST_WINAPI_NTDDI_WIN2K 0x05000000 51 #define BOOST_WINAPI_NTDDI_WIN2KSP1 0x05000100 52 #define BOOST_WINAPI_NTDDI_WIN2KSP2 0x05000200 53 #define BOOST_WINAPI_NTDDI_WIN2KSP3 0x05000300 54 #define BOOST_WINAPI_NTDDI_WIN2KSP4 0x05000400 55 56 #define BOOST_WINAPI_NTDDI_WINXP 0x05010000 57 #define BOOST_WINAPI_NTDDI_WINXPSP1 0x05010100 58 #define BOOST_WINAPI_NTDDI_WINXPSP2 0x05010200 59 #define BOOST_WINAPI_NTDDI_WINXPSP3 0x05010300 60 #define BOOST_WINAPI_NTDDI_WINXPSP4 0x05010400 61 62 #define BOOST_WINAPI_NTDDI_WS03 0x05020000 63 #define BOOST_WINAPI_NTDDI_WS03SP1 0x05020100 64 #define BOOST_WINAPI_NTDDI_WS03SP2 0x05020200 65 #define BOOST_WINAPI_NTDDI_WS03SP3 0x05020300 66 #define BOOST_WINAPI_NTDDI_WS03SP4 0x05020400 67 68 #define BOOST_WINAPI_NTDDI_WIN6 0x06000000 69 #define BOOST_WINAPI_NTDDI_WIN6SP1 0x06000100 70 #define BOOST_WINAPI_NTDDI_WIN6SP2 0x06000200 71 #define BOOST_WINAPI_NTDDI_WIN6SP3 0x06000300 72 #define BOOST_WINAPI_NTDDI_WIN6SP4 0x06000400 73 74 #define BOOST_WINAPI_NTDDI_VISTA BOOST_WINAPI_NTDDI_WIN6 75 #define BOOST_WINAPI_NTDDI_VISTASP1 BOOST_WINAPI_NTDDI_WIN6SP1 76 #define BOOST_WINAPI_NTDDI_VISTASP2 BOOST_WINAPI_NTDDI_WIN6SP2 77 #define BOOST_WINAPI_NTDDI_VISTASP3 BOOST_WINAPI_NTDDI_WIN6SP3 78 #define BOOST_WINAPI_NTDDI_VISTASP4 BOOST_WINAPI_NTDDI_WIN6SP4 79 80 #define BOOST_WINAPI_NTDDI_LONGHORN BOOST_WINAPI_NTDDI_VISTA 81 82 #define BOOST_WINAPI_NTDDI_WS08 BOOST_WINAPI_NTDDI_WIN6SP1 83 #define BOOST_WINAPI_NTDDI_WS08SP2 BOOST_WINAPI_NTDDI_WIN6SP2 84 #define BOOST_WINAPI_NTDDI_WS08SP3 BOOST_WINAPI_NTDDI_WIN6SP3 85 #define BOOST_WINAPI_NTDDI_WS08SP4 BOOST_WINAPI_NTDDI_WIN6SP4 86 87 #define BOOST_WINAPI_NTDDI_WIN7 0x06010000 88 #define BOOST_WINAPI_NTDDI_WIN7SP1 0x06010100 // Not defined in Windows SDK 89 #define BOOST_WINAPI_NTDDI_WIN8 0x06020000 90 #define BOOST_WINAPI_NTDDI_WINBLUE 0x06030000 91 #define BOOST_WINAPI_NTDDI_WINTHRESHOLD 0x0A000000 92 #define BOOST_WINAPI_NTDDI_WIN10 0x0A000000 93 #define BOOST_WINAPI_NTDDI_WIN10_TH2 0x0A000001 94 #define BOOST_WINAPI_NTDDI_WIN10_RS1 0x0A000002 95 #define BOOST_WINAPI_NTDDI_WIN10_RS2 0x0A000003 96 #define BOOST_WINAPI_NTDDI_WIN10_RS3 0x0A000004 97 98 #define BOOST_WINAPI_DETAIL_MAKE_NTDDI_VERSION2(x) x##0000 99 #define BOOST_WINAPI_DETAIL_MAKE_NTDDI_VERSION(x) BOOST_WINAPI_DETAIL_MAKE_NTDDI_VERSION2(x) 100 101 #if !defined(BOOST_USE_WINAPI_VERSION) 102 #if defined(_WIN32_WINNT) 103 #define BOOST_USE_WINAPI_VERSION _WIN32_WINNT 104 #elif defined(WINVER) 105 #define BOOST_USE_WINAPI_VERSION WINVER 106 #else 107 // By default use Windows 7 API on compilers that support it and Vista or XP on the others 108 #if (defined(_MSC_VER) && _MSC_VER < 1500) || defined(BOOST_WINAPI_IS_MINGW) 109 #define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WINXP 110 #elif (defined(_MSC_VER) && _MSC_VER < 1600) 111 #define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN6 112 #else 113 #define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN7 114 #endif 115 #endif 116 #endif 117 118 #if !defined(BOOST_USE_NTDDI_VERSION) 119 #if defined(NTDDI_VERSION) 120 #define BOOST_USE_NTDDI_VERSION NTDDI_VERSION 121 // Default to respective Windows version with the latest Service Pack 122 #elif BOOST_USE_WINAPI_VERSION == BOOST_WINAPI_VERSION_WIN2K 123 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_NTDDI_WIN2KSP4 124 #elif BOOST_USE_WINAPI_VERSION == BOOST_WINAPI_VERSION_WINXP 125 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_NTDDI_WINXPSP3 126 #elif BOOST_USE_WINAPI_VERSION == BOOST_WINAPI_VERSION_WS03 127 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_NTDDI_WS03SP2 128 #elif BOOST_USE_WINAPI_VERSION == BOOST_WINAPI_VERSION_WIN6 129 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_NTDDI_WIN6SP2 130 #elif BOOST_USE_WINAPI_VERSION == BOOST_WINAPI_VERSION_WIN7 131 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_NTDDI_WIN7SP1 132 #elif BOOST_USE_WINAPI_VERSION == BOOST_WINAPI_VERSION_WIN10 133 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_NTDDI_WIN10_RS3 134 #else 135 #define BOOST_USE_NTDDI_VERSION BOOST_WINAPI_DETAIL_MAKE_NTDDI_VERSION(BOOST_USE_WINAPI_VERSION) 136 #endif 137 #endif 138 139 // Known Windows SDK versions, taken from VER_PRODUCTBUILD macro value defined in ntverp.h. 140 // These values can be used to compare with BOOST_PLAT_WINDOWS_SDK_VERSION from Boost.Predef. 141 #define BOOST_WINAPI_WINDOWS_SDK_MSVC71 BOOST_VERSION_NUMBER(0, 0, 3668) // Windows SDK bundled with MSVC 7.1 142 #define BOOST_WINAPI_WINDOWS_SDK_MSVC8 BOOST_VERSION_NUMBER(0, 0, 3790) // Windows SDK bundled with MSVC 8 143 #define BOOST_WINAPI_WINDOWS_SDK_6_0 BOOST_VERSION_NUMBER(0, 0, 6000) // Windows SDK 6.0 144 #define BOOST_WINAPI_WINDOWS_SDK_7_0 BOOST_VERSION_NUMBER(0, 0, 7600) // Windows SDK 7.0, 7.1 145 #define BOOST_WINAPI_WINDOWS_SDK_8_0 BOOST_VERSION_NUMBER(0, 0, 9200) // Windows SDK 8.0 146 #define BOOST_WINAPI_WINDOWS_SDK_8_1 BOOST_VERSION_NUMBER(0, 0, 9600) // Windows SDK 8.1 147 #define BOOST_WINAPI_WINDOWS_SDK_10_0 BOOST_VERSION_NUMBER(0, 0, 10011) // Windows SDK 10.0 148 // MinGW does not have the ntverp.h header but it defines VER_PRODUCTBUILD in ddk/ntifs.h. 149 // Cygwin MinGW also defines this version. 150 #define BOOST_WINAPI_WINDOWS_SDK_MINGW BOOST_VERSION_NUMBER(0, 0, 10000) 151 // MinGW-w64 defines the same version as the Windows SDK bundled with MSVC 8 152 #define BOOST_WINAPI_WINDOWS_SDK_MINGW_W64 BOOST_VERSION_NUMBER(0, 0, 3790) 153 154 #if !defined(BOOST_USE_WINAPI_FAMILY) 155 #if defined(WINAPI_FAMILY) 156 #define BOOST_USE_WINAPI_FAMILY WINAPI_FAMILY 157 #elif defined(WINAPI_FAMILY_DESKTOP_APP) 158 // If none is specified, default to a desktop application which is the most 159 // backwards compatible to previous ways of doing things, if families are even 160 // defined. 161 #define BOOST_USE_WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP 162 #endif 163 #endif 164 165 // 166 // UWP Support 167 // 168 // On platforms without windows family partition support it is assumed one 169 // has all APIs and access is controlled by _WIN32_WINNT or similar mechanisms. 170 // 171 // Leveraging Boost.Predef here 172 // 173 #if BOOST_PLAT_WINDOWS_UWP 174 #define BOOST_WINAPI_PARTITION_APP (BOOST_PLAT_WINDOWS_DESKTOP || BOOST_PLAT_WINDOWS_STORE || BOOST_WINAPI_PARTITION_PHONE) 175 #define BOOST_WINAPI_PARTITION_PC (BOOST_PLAT_WINDOWS_STORE) 176 #define BOOST_WINAPI_PARTITION_PHONE (BOOST_PLAT_WINDOWS_PHONE) 177 #define BOOST_WINAPI_PARTITION_SYSTEM (BOOST_PLAT_WINDOWS_SYSTEM) 178 #define BOOST_WINAPI_PARTITION_SERVER (BOOST_PLAT_WINDOWS_SERVER) 179 #define BOOST_WINAPI_PARTITION_DESKTOP (BOOST_PLAT_WINDOWS_DESKTOP) 180 #else // BOOST_PLAT_WINDOWS_UWP 181 #define BOOST_WINAPI_PARTITION_APP (1) 182 #define BOOST_WINAPI_PARTITION_PC (1) 183 #define BOOST_WINAPI_PARTITION_PHONE (1) 184 #define BOOST_WINAPI_PARTITION_SYSTEM (1) 185 #define BOOST_WINAPI_PARTITION_SERVER (1) 186 #define BOOST_WINAPI_PARTITION_DESKTOP (1) 187 #endif // BOOST_PLAT_WINDOWS_UWP 188 189 // 190 // Windows 8.x SDK defines some items in the DESKTOP partition and then Windows SDK 10.0 defines 191 // the same items to be in APP or SYSTEM partitions, and APP expands to DESKTOP or PC or PHONE. 192 // The definition of BOOST_WINAPI_PARTITION_APP_SYSTEM provides a universal way to get this 193 // right as it is seen in a number of places in the SDK. 194 // 195 #define BOOST_WINAPI_PARTITION_APP_SYSTEM \ 196 ( \ 197 ((BOOST_PLAT_WINDOWS_SDK_VERSION >= BOOST_WINAPI_WINDOWS_SDK_10_0) && (BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM)) || \ 198 ((BOOST_PLAT_WINDOWS_SDK_VERSION < BOOST_WINAPI_WINDOWS_SDK_10_0) && BOOST_WINAPI_PARTITION_DESKTOP) \ 199 ) 200 201 // Simiarly, some other symbols were re-classified as DESKTOP or SYSTEM 202 #define BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM \ 203 ( \ 204 ((BOOST_PLAT_WINDOWS_SDK_VERSION >= BOOST_WINAPI_WINDOWS_SDK_10_0) && (BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM)) || \ 205 ((BOOST_PLAT_WINDOWS_SDK_VERSION < BOOST_WINAPI_WINDOWS_SDK_10_0) && BOOST_WINAPI_PARTITION_DESKTOP) \ 206 ) 207 208 #if defined(BOOST_USE_WINDOWS_H) || defined(BOOST_WINAPI_DEFINE_VERSION_MACROS) 209 // We have to define the version macros so that windows.h provides the necessary symbols 210 #if !defined(_WIN32_WINNT) 211 #define _WIN32_WINNT BOOST_USE_WINAPI_VERSION 212 #endif 213 #if !defined(WINVER) 214 #define WINVER BOOST_USE_WINAPI_VERSION 215 #endif 216 #if !defined(NTDDI_VERSION) 217 #define NTDDI_VERSION BOOST_USE_NTDDI_VERSION 218 #endif 219 #if !defined(WINAPI_FAMILY) && defined(BOOST_USE_WINAPI_FAMILY) 220 #define WINAPI_FAMILY BOOST_USE_WINAPI_FAMILY 221 #endif 222 #endif 223 224 #if defined (WIN32_PLATFORM_PSPC) 225 #define BOOST_WINAPI_IMPORT BOOST_SYMBOL_IMPORT 226 #define BOOST_WINAPI_IMPORT_EXCEPT_WM 227 #elif defined (_WIN32_WCE) 228 #define BOOST_WINAPI_IMPORT 229 #define BOOST_WINAPI_IMPORT_EXCEPT_WM 230 #else 231 #define BOOST_WINAPI_IMPORT BOOST_SYMBOL_IMPORT 232 #define BOOST_WINAPI_IMPORT_EXCEPT_WM BOOST_SYMBOL_IMPORT 233 #endif 234 235 #include <boost/config.hpp> 236 237 #ifdef BOOST_HAS_PRAGMA_ONCE 238 #pragma once 239 #endif 240 241 #endif // BOOST_WINAPI_CONFIG_HPP_INCLUDED_ 242