Partilhar via


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).

Confira também

Histórico de alterações do Visual C++