Atualizar WINVER e _WIN32_WINNT
Ao usar o SDK do Windows, você pode especificar em quais versões do Windows seu código pode ser executado. As macros de pré-processador WINVER e _WIN32_WINNT especificam qual a versão mínima do sistema operacional compatível com o código. O Visual Studio e o compilador do Microsoft C++ dão suporte para o Windows 7 SP1 e posterior. Os conjuntos de ferramentas mais antigos são compatíveis com Windows XP SP2, Windows Server 2003 SP1, Vista e Windows Server 2008. Windows 95, Windows 98, Windows ME, Windows NT e Windows 2000 não são compatíveis.
Ao atualizar um projeto mais antigo, talvez seja necessário atualizar suas macros WINVER ou _WIN32_WINNT. Se valores para uma versão incompatível do Windows forem atribuídos a elas, você poderá ver erros de compilação relacionados a essas macros.
Comentários
Para modificar as macros, em um arquivo de cabeçalho (por exemplo,targetver.h, que é incluído por alguns modelos de projeto destinados ao Windows), adicione as linhas a seguir.
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00
As macros no exemplo destinam-se a todas as versões do sistema operacional Windows 10. Os valores possíveis são listados no arquivo de cabeçalho do Windows sdkddkver.h, que define as macros para cada versão principal do Windows. Se você deseja compilar seu aplicativo para dar suporte uma plataforma anterior do Windows, inclua WinSDKVer.h. Em seguida, defina as macros WINVER e _WIN32_WINNT para a plataforma mais antiga compatível antes de incluir sdkddkver.h. Aqui estão as linhas da versão do SDK do Windows 10 de sdkddkver.h, que codificam os valores para cada versão principal do Windows:
//
// _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
// . . .
Para obter uma abordagem mais refinada para o controle de versão, você pode usar as constantes de versão NTDDI em sdkddkver.h. Aqui estão algumas das macros definidas pelo sdkddkver.h no SDK do Windows 10 versão 10.0.18362.0:
//
// 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) )
As macros OSVER, SPVER e SUBVER podem ser usadas em seu código para controlar a compilação condicional para diferentes níveis de suporte à API.
Talvez você não veja todas essas versões do Windows listadas no sdkddkver.h que você está visualizando. Isso significa que você provavelmente está usando uma versão mais antiga do SDK do Windows. (Se você vir mais, provavelmente está olhando para uma versão mais recente do SDK.) Por padrão, novos projetos do Windows no Visual Studio usam o SDK mais recente do Windows que é fornecido com o Visual Studio. Para usar um SDK mais recente instalado separadamente, você precisará definir o SDK do Windows explicitamente nas propriedades do projeto.
Observação
Os valores não têm garantia de funcionamento se você incluir cabeçalhos MFC internos em seu aplicativo.
Também é possível definir essa macro usando a opção de compilador /D
. Para obter mais informações, consulte /D (definições de pré-processador).
Para obter mais informações sobre os significados dessas macros, consulte Using the Windows Headers (Usando os cabeçalhos do Windows).