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 FwpmNetEventCreateEnumHandle – FwpmNetEventCreateEnumHandle0 – 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:
- FwpmNetEventEnum2 para Windows 8 (ou posterior)
- FwpmNetEventEnum1 para Windows 7 é direcionado
- FwpmNetEventEnum0 para sistemas operacionais anteriores (como Windows Vista ou Windows Vista com Service Pack 1 (SP1))
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)
.