PAM Version-Independent noms et ciblage de versions spécifiques de Windows

Dans de nombreux cas, l’API de plateforme de filtrage Windows (PAM) fournit plusieurs versions d’une fonction ou d’une structure.

La plupart des noms de données et de fonctions dans l’API PAM se terminent par un numéro de version, tel que « 0 » ou « 1 », même s’il n’existe qu’une seule version.

Mappage de version dans fwpvi.h

Le fichier d’en-tête fwpvi.h est inclus à partir du Kit de développement logiciel (SDK) Windows 7 et de WDK. Ce fichier d’en-tête mappe le nom de l’API sans version à la version appropriée pour une utilisation avec un système d’exploitation donné.

Par exemple, voici un bref extrait de la version de fwpvi.h incluse dans le Kit de développement logiciel (SDK) 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

Comme indiqué ci-dessus, il n’existe qu’une seule version de FwpmNetEventCreateEnumHandle : FwpmNetEventCreateEnumHandle0 . Par conséquent, tout appel à FwpmNetEventCreateEnumHandleappellera toujours FwpmNetEventCreateEnumHandle0, quel que soit le système d’exploitation ciblé.

Toutefois, il existe trois versions de FwpmNetEventEnum : FwpmNetEventEnum0, FwpmNetEventEnum1 et FwpmNetEventEnum2. Le fichier d’en-tête fwpvi.h garantit qu’un appel à FwpmNetEventEnum appellera la version la plus appropriée pour le système d’exploitation ciblé :

Appel de fonctions et de structures Version-Independent

Les développeurs PAM ciblant un système d’exploitation particulier ou une version WDK sont encouragés à toujours programmer sur les macros indépendantes de la version. Cette opération sélectionne automatiquement la dernière version prise en charge dans le système d’exploitation que vous ciblez. L’utilisation des fichiers d’en-tête les plus récents est recommandée, même lors du ciblage d’un système d’exploitation antérieur. Cela permet de garantir l’utilisation de la dernière version prise en charge et de faciliter la maintenance et la mise à jour de votre code.

La documentation de référence sur l’API PAM décrit chaque version d’une API numérotée. S’il existe plusieurs versions, le système d’exploitation ciblé est noté. Toutefois, les développeurs souhaitent généralement appeler les API indépendantes de la version (sans numéro) et indiquer le système d’exploitation ciblé (par exemple, NTDDI_WIN6 pour Windows Vista ou NTDDI_WIN8 pour Windows 8).

Pour garantir une gestion correcte des fonctions qui prennent différents paramètres dans différentes versions, vous pouvez inclure des blocs conditionnels tels que #if (NTDDI_VERSION >= NTDDI_WIN7).