WFP Version-Independent 名称和针对特定版本的 Windows 的目标定位

在许多情况下,Windows 筛选平台 (WFP) API 提供了多个版本的函数或结构。

粮食计划署 API 中的大多数数据和函数名称以版本号(例如“0”或“1”)结尾,即使只有一个版本。

fwpvi.h 中的版本映射

从 Windows 7 SDK 和 WDK 开始,fwpvi.h 头文件被提供。 此头文件将无版本 API 名称映射到适用于给定作系统的版本。

例如,下面是 Windows 8 SDK 中包含的 fwpvi.h 版本的简短摘录。

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

如上所示,FwpmNetEventCreateEnumHandle 只有一个版本 – FwpmNetEventCreateEnumHandle0 – 因此,任何对 FwpmNetEventCreateEnumHandle 的调用都会始终调用 FwpmNetEventCreateEnumHandle0,无论操作系统目标是什么。

但是, FwpmNetEventEnum 有三个版本: FwpmNetEventEnum0FwpmNetEventEnum1FwpmNetEventEnum2。 fwpvi.h 头文件确保对 FwpmNetEventEnum 的调用将调用最适合目标操作系统的版本:

调用 Version-Independent 函数和结构

鼓励 WFP 开发人员面向特定的操作系统或 WDK 版本时,始终针对与版本无关的宏进行编程。 这将自动选择你所针对的操作系统中支持的最新版本。 建议使用最新的头文件,即使在面向较早版本的操作系统时也是如此。 一致地执行此作将确保使用最新的受支持版本,还可以更轻松地维护和更新代码。

WFP API 参考文档描述了编号 API 的每个版本。 如果存在多个版本,则标明目标作业系统。 但是,开发人员通常希望调用与版本无关(无编号)API,并指示目标作系统(例如 Windows Vista 的 NTDDI_WIN6 或 Windows 8 NTDDI_WIN8 )。

若要确保正确处理在不同版本中采用不同参数的函数,可以包括条件块,例如 #if (NTDDI_VERSION >= NTDDI_WIN7)