WFP Version-Independent Windows 的特定版本的名称和目标
在许多情况下,Windows 筛选平台 (WFP) API 提供多个版本的函数或结构。
WFP 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 有三个版本: FwpmNetEventEnum0、 FwpmNetEventEnum1 和 FwpmNetEventEnum2。 fwpvi.h 头文件确保对 FwpmNetEventEnum 的调用将调用最适合目标操作系统的版本:
- 适用于 Windows 8 (或更高版本的 FwpmNetEventEnum2)
- 面向 Windows 7 的 FwpmNetEventEnum1
- FwpmNetEventEnum0 适用于早期操作系统 (,例如 Windows Vista 或 Windows Vista Service Pack 1 (SP1) )
调用Version-Independent函数和结构
建议面向特定操作系统或 WDK 版本的 WFP 开发人员始终针对与版本无关的宏进行编程。 这将自动选择所面向的操作系统中支持的最新版本。 建议使用最新的头文件,即使面向较早的操作系统也是如此。 一致地执行此操作将确保使用最新的受支持版本,并且还可以更轻松地维护和更新代码。
WFP API 参考文档介绍了编号 API 的每个版本。 如果存在多个版本,则会记录目标操作系统。 但是,开发人员通常希望调用与版本无关的 (无数) API,并指示目标操作系统 (,例如 Windows Vista 的NTDDI_WIN6或适用于Windows 8) 的NTDDI_WIN8。
若要确保正确处理在不同版本中采用不同参数的函数,可以包含条件块,例如 #if (NTDDI_VERSION >= NTDDI_WIN7)
。