WFP API
Windows 篩選平臺 (WFP) API 分成下列元件。
元件 | 描述 | 頭檔 |
---|---|---|
注標 API (FWPS)${REMOVE}$ |
圖說文字所使用的數據類型。附註 這些數據類型記載於 Microsoft Windows 驅動程式開發工具包 (DDK) 中。 |
fwpstypes.idl |
用來實作圖說文字的函式 和 列舉型別。注意 這些函式和列舉型別記載於 DDK 中。 |
fwpsk.h |
|
IKE/AuthIP API (IKEEXT)${REMOVE}$ |
列舉型別 和 結構 用於管理 IKE 和 AuthIP 主要模式 (MM) 原則和安全性關聯。 |
iketypes.idl |
函式 用於管理 IKE 和 AuthIP MM 原則和安全性關聯。 |
fwpmk.h |
|
IPsec API (IPSEC)${REMOVE}$ |
用於管理 IPsec 原則和安全性關聯的列舉型別 和 結構。 |
ipsectypes.idl |
函式 用於管理 IPsec 原則和安全性關聯。 |
fwpmk.h |
|
管理 API (FWPM)${REMOVE}$ |
用於管理篩選引擎的列舉型別 和 結構。 |
fwpmtypes.idl |
用於管理篩選引擎的函式。 這些函式可用來執行下列工作:
|
fwpmk.h |
|
共用 API (FWP) | 基本 列舉型別 和 結構, 跨 Windows 篩選平台共用。 |
fwptypes.idl |
數據類型名稱全都是大寫和底線分隔。 名稱一律以識別其元件群組的前置詞開頭,例如 FWPM_PROVIDER0。
函式名稱是混合大小寫和以大小寫分隔。 名稱一律以識別其元件群組的前置詞開頭,例如 FwpmProviderContextAdd0。
大部分的數據和函式名稱結尾都是版本號碼。 fwpvi.h 頭檔會將版本無關的數據和函式名稱對應至適合與指定作系統搭配使用的版本。 如需詳細資訊,請參閱 糧食計劃署 Version-Independent 名稱和以 Windows的特定版本為目標。
每個元件都無法獨立。 例如,IKE 主要模式 (MM) 原則是在 IKEEXT 元件中定義,但會儲存在提供者內容中,並與 FWPM API 元件中找到的篩選相關聯。
User-Mode 和 Kernel-Mode 公用頭檔
大部分的 WFP 函式都可以從使用者模式或核心模式呼叫。 不過,使用者模式函式會傳回代表 Win32 錯誤碼的 DWORD 值,而內核模式函式則會傳回代表 NT 狀態代碼的 NTSTATUS 值。 因此,使用者模式和核心模式之間的函式名稱和語意完全相同,但函式簽章則不同。 這需要函式原型的個別使用者模式和核心模式特定標頭。 使用者模式頭檔名稱以 「u」 結尾,而內核模式頭檔名稱結尾為 「k」。
下表列出定義 WFP 函式的 Win32 頭檔。
頭檔 | 描述 |
---|---|
fwpmk.h | FWPM、IPsec 和 IKEEXT 元件的核心模式函式原型。 僅適用於 DDK。 |
fwpmu.h | FWPM、IPsec 和 IKEEXT 元件的使用者模式函式原型。 只適用於 Microsoft Windows 軟體開發工具套件 (SDK) 。 |
fwpsk.h | FWPS 元件的核心模式函式原型和列舉類型。 僅適用於 DDK。 |
fwpsu.h | FWPS 元件的使用者模式函式原型和列舉型別。 僅適用於 Windows SDK。注意 使用者模式 FWPS 列舉型別與核心模式 FWPS 列舉型別相同。 因此,這些類型只會記載於 DDK 中。 注意 使用者模式 FWPS 函式原型與核心模式 FWPS 函式原型相同,但傳回碼除外。 使用者模式 FWPS 函式會傳回 DWORD,而內核模式 FWPS 函式則會傳回 NTSTATUS。 因此,這些函式只會記載於 DDK 中。 |
所有使用者模式函式都會從 fwpuclnt.dll導出。 所有內核模式函式都會從 fwpkclnt.sys導出。
管理 (FWPM) 和圖說文字 (FWPS) 資料類型
大部分的 FWPM 數據類型都用於管理工作,例如從應用程式或驅動程式新增篩選或圖說文字,都有 FWPS 對應專案。 FWPS 數據類型會在網路流量的實際篩選期間使用,在用於分類的圖說例程內容中。
例如,為了將篩選新增至特定篩選引擎層,程式設計人員應該使用 FWPM 類型,例如:filter.layerKey = FWPM_LAYER_INBOUND_IPPACKET
。 若要檢查要從哪個層呼叫圖說文字,程式設計人員應該使用對應的 FWPS 類型: if (inFixedValues->layerId == FWPS_LAYER_INBOUND_IPPACKET)
。
某些 FWPS 與 FWPM 數據類型的對應專案正在擴充原始的 FWPM 數據類型。 例如,若要在許多篩選引擎層中新增篩選條件,程式設計人員會指定 filterCondition.fieldKey = FWPM_CONDITION_IP_PROTOCOL
,而不論篩選引擎層為何。 若要尋找篩選條件值,程式設計人員會指定層次特定的 FWPS 類型,例如:inFixedValues->incomingValue[FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL]
。
FWPS 數據類型通常小於其 FWPM 對應專案。 例如,FWPM 篩選層標識子 是 GUIDs (16 位元組),而 FWPS 篩選層識別碼 則 UINT16 (16 位)。 FWPS 數據類型的大小較小可改善系統效能,因為整數比較超過即時流量的 GUID 比較。 此外,核心記憶體會有效率地使用,因為 FWPS 類型全都用於核心來管理篩選,而 FWPM 類型則儲存在使用者模式中來管理不同的層。