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 的呼叫將使用最適合目標作業系統的版本:
- FwpmNetEventEnum2 適用於 Windows 8 或更新版本
- 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)
。