Nombres de Version-Independent de PMA y versiones específicas de destino de Windows

En muchos casos, la API de la Plataforma de filtrado de Windows (PMA) proporciona más de una versión de una función o estructura.

La mayoría de los nombres de datos y funciones de la API de PMA terminan con un número de versión, como "0" o "1", incluso si solo hay una versión.

Asignación de versiones en fwpvi.h

El archivo de encabezado fwpvi.h se incluye a partir del SDK de Windows 7 y WDK. Este archivo de encabezado asigna el nombre de la API sin versión a la versión adecuada para su uso con un sistema operativo determinado.

Por ejemplo, este es un breve extracto de la versión de fwpvi.h incluida en el SDK de 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

Como se muestra anteriormente, solo hay una versión de FwpmNetEventCreateEnumHandleFwpmNetEventCreateEnumHandle0 , por lo que cualquier llamada a FwpmNetEventCreateEnumHandle siempre llamará a FwpmNetEventCreateEnumHandle0, independientemente del sistema operativo de destino.

Sin embargo, hay tres versiones de FwpmNetEventEnum: FwpmNetEventEnum0, FwpmNetEventEnum1 y FwpmNetEventEnum2. El archivo de encabezado fwpvi.h garantiza que una llamada a FwpmNetEventEnum llame a la versión más adecuada para el sistema operativo de destino:

Llamar a funciones y estructuras de Version-Independent

Se recomienda a los desarrolladores de PMA que tienen como destino un sistema operativo determinado o una versión de WDK programar siempre con las macros independientes de la versión. Esto seleccionará automáticamente la versión más reciente admitida en el sistema operativo de destino. Se recomienda usar los archivos de encabezado más recientes, incluso cuando el destino es un sistema operativo anterior. Esto garantiza de forma coherente que se use la versión compatible más reciente y también puede facilitar el mantenimiento y la actualización del código.

La documentación de referencia de la API de PMA describe cada versión de una API numerada. Si existe más de una versión, se indica el sistema operativo de destino. Sin embargo, los desarrolladores generalmente querrán llamar a las API independientes de la versión (sin números) e indicar el sistema operativo de destino (como NTDDI_WIN6 para Windows Vista o NTDDI_WIN8 para Windows 8).

Para garantizar el control adecuado de las funciones que toman parámetros diferentes en distintas versiones, puede incluir bloques condicionales como #if (NTDDI_VERSION >= NTDDI_WIN7).