Nomes de Version-Independent WFP e direcionamento de versões específicas do Windows

Em muitos casos, a API WFP (Plataforma de Filtragem do Windows) fornece mais de uma versão de uma função ou estrutura.

A maioria dos nomes de dados e funções na API do WFP termina com um número de versão, como "0" ou "1", mesmo que haja apenas uma versão.

Mapeamento de versão em fwpvi.h

O arquivo de cabeçalho fwpvi.h está incluído a partir do SDK do Windows 7 e do WDK. Esse arquivo de cabeçalho mapeia o nome da API sem versão para a versão apropriada para uso com um determinado sistema operacional.

Por exemplo, aqui está um breve trecho da versão do fwpvi.h incluída no SDK do Windows 8.

#define FwpmNetEventCreateEnumHandle FwpmNetEventCreateEnumHandle0
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define FwpmNetEventEnum FwpmNetEventEnum2
#elif (NTDDI_VERSION >= NTDDI_WIN7)
#define FwpmNetEventEnum FwpmNetEventEnum1
#else
#define FwpmNetEventEnum FwpmNetEventEnum0
#endif

Conforme mostrado acima, há apenas uma versão de FwpmNetEventCreateEnumHandleFwpmNetEventCreateEnumHandle0 – portanto, qualquer chamada para FwpmNetEventCreateEnumHandle sempre chamará FwpmNetEventCreateEnumHandle0, independentemente do sistema operacional direcionado.

No entanto, há três versões de FwpmNetEventEnum: FwpmNetEventEnum0, FwpmNetEventEnum1 e FwpmNetEventEnum2. O arquivo de cabeçalho fwpvi.h garante que uma chamada para FwpmNetEventEnum chame a versão mais apropriada para o sistema operacional de destino:

Chamando Version-Independent funções e estruturas

Os desenvolvedores do WFP direcionados a um determinado sistema operacional ou versão do WDK são incentivados a sempre programar em relação às macros independentes de versão. Isso selecionará automaticamente a versão mais recente com suporte no sistema operacional que você está direcionando. O uso dos arquivos de cabeçalho mais recentes é recomendado, mesmo ao direcionar um sistema operacional anterior. Fazer isso de forma consistente garantirá que a versão mais recente com suporte seja usada e também poderá facilitar a manutenção e a atualização do código.

A documentação de referência da API do WFP descreve cada versão de uma API numerada. Se houver mais de uma versão, o sistema operacional de destino será observado. No entanto, os desenvolvedores geralmente desejarão chamar as APIs independentes de versão (sem número) e indicar o sistema operacional de destino (como NTDDI_WIN6 para Windows Vista ou NTDDI_WIN8 para Windows 8).

Para garantir o tratamento adequado de funções que têm parâmetros diferentes em versões diferentes, você pode incluir blocos condicionais, como #if (NTDDI_VERSION >= NTDDI_WIN7).