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

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

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

Mappage de version dans fwpvi.h

Le fichier d’en-tête fwpvi.h est inclus à partir du sdk Windows 7 et 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 FwpmNetEventCreateEnumHandleFwpmNetEventCreateEnumHandle0 . Par conséquent, tout appel à FwpmNetEventCreateEnumHandle appelle 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 au système d’exploitation ciblé :

Appel de fonctions et de structures Version-Independent

Les développeurs du PAM ciblant un système d’exploitation particulier ou une version WDK sont encouragés à toujours programmer contre les macros indépendantes de la version. Cela 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 lorsque vous ciblez un système d’exploitation antérieur. Cela garantit que la dernière version prise en charge est utilisée et peut également faciliter la maintenance et la mise à jour de votre code.

La documentation de référence de l’API PAM décrit chaque version d’une API numérotée. Si plusieurs versions existent, 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 nombre) 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 appropriée 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).