Windows 篩選平臺可延伸協助程序類別
Windows 篩選平臺 (WFP) 包含網路診斷架構 (NDF) 協助程式類別,稱為篩選平台協助程序類別 (FPHC)。 FPHC 可協助找出糧食計劃署所造成連線問題的根本原因。 第三方防火牆開發人員可以實作自己的 NDF 協助程序類別。 FPHC 擴充性可讓這些第三方協助程式類別在診斷期間叫用。
本主題假設熟悉 WFP API。
為什麼要擴充 FPHC?
撰寫呼叫 WFP API 之應用程式的所有開發人員都應該撰寫擴充 FPHC 的 NDF 協助程式類別。
FPHC 可以將 WFP 識別為連線問題的原因。 如果有的話,FPHC 也可以識別建立封鎖網路流量篩選的提供者。 FPHC 會將這項資訊傳遞給 NDF,接著可以通知使用者 WFP 造成連線問題,並提供提供者封鎖流量的名稱。
不過,FPHC 無法向用戶建議更正動作,也無法提供篩選封鎖使用者流量的原因。 只有 FPHC 擴充功能可以執行這些工作。
請考慮呼叫 WFP API 的第三方防火牆應用程式。 如果第三方防火牆實作 FPHC 擴充功能,則可以實作自定義動作來處理 NDF 所識別的連線問題。 當 NDF 診斷第三方防火牆封鎖應用程式時,FPHC 擴充功能可以處理封鎖事件。 FPHC 擴充功能可以處理事件的其中一種方式,就是提示使用者使用防火牆解除封鎖程式,然後在使用者確認時解除封鎖程式。 或者,FPHC 擴充功能可以藉由通知使用者封鎖應用程式的原因來處理事件,例如應用程式因為防火牆被視為惡意代碼而遭到封鎖。
關於 WFP 診斷
叫用 NDF 來診斷網路問題時,會連絡協助程式類別以判斷問題的原因。 如果較高層級的協助程式類別判斷網路失敗可能是由 WFP 造成的,它會根據可用資訊產生 FPHC 的假設。 NDF 會將這個假設以數個事件屬性的形式傳遞給 FPHC。 下列 FPHC 事件屬性一節會詳細說明 這些屬性 。
網路問題可描述為影響特定連線嘗試的連線問題。 例如,使用者可能不小心按兩下 [不允許] 來封鎖應用程式。 防火牆接著會封鎖應用程式系結至任何埠。 使用者不知道應用程式為何遭到封鎖,可能會嘗試透過應用程式所提供的進入點來診斷問題。 FPHC 會查看記錄,如果找到相符專案,則會擷取該特定篩選的篩選標識碼和提供者識別符。 此時,FPHC 知道該篩選的擁有者是誰,而且它會將診斷程式交給適當的協助程序類別,以便進一步診斷。
將 WFP 事件記錄檔中最新的事件選取為與網路問題相關的屬性。 如果找不到相符的事件,且在 WFP 記錄檔中涵蓋事件發生的時間,FPHC 會向 NDF 指出其狀況良好。 如果找不到相符的事件,而且 WFP 記錄不包含事件發生的時間,FPHC 會將不確定的狀態傳回 NDF。
如果找到相符的事件,FPHC 會使用導致事件識別封鎖連線之安全性規則提供者的篩選提供者標識符。 FPHC 接著會檢查該提供者是否有協助程式類別延伸模組。 如果找到其中一個,FPHC 就會為該提供者產生假設,然後 NDF 會叫用延伸模組。 延伸模組應該會傳回實用的診斷和修復資訊給使用者。
協助程式類別註冊
必須註冊 FPHC 擴充功能,如註冊 NDF 協助程式類別延伸模組中所述。 實作協助程式類別的開發人員必須註冊其擴充功能,以確保 NDF 會在適當時呼叫延伸模組。 以下所述的比對屬性必須儲存在登錄的 HKLM\System\CurrentControlSet\Control\NetDiagFx\VendorName\HostDLLs\協助程序類別 DLL\HelperClasses\協助程序類別名稱\MatchAttributes 之下。
下表顯示用來識別在 WFP 事件記錄檔中診斷中使用的假設的比對屬性。
名稱 | 類型 | 描述 |
---|---|---|
ProviderID | REG_SZ | FPHC 擴充功能的 GUID。 此值必須與 WFP 提供者 GUID 相同。 此字串會區分大小寫。 它應該以大寫括住大括號和連字元儲存在登錄中。 例如,{C200E360-38C5-11CE-AE62-08002B2B79EF} 是有效的 ProviderID。 |
當封鎖篩選的 ProviderID 符合已註冊協助程式類別的 ProviderID 時,FPHC 會通知 NDF 叫用該協助程式類別,從而擴充 FPHC 的診斷功能。
FPHC 事件屬性
下表列出與每個相符事件相關聯的事件屬性。 每個事件屬性都會儲存在 HELPER_ATTRIBUTE 結構中。 找到相符的事件時,NDF 會將這些屬性傳遞至 FPHC。 這些可以接著傳遞至 FPHC 擴充功能。
屬性 | ATTRIBUTE_TYPE值 | 描述 |
---|---|---|
提供者 GUID | AT_GUID | 與篩選相關聯的提供者 GUID。 |
時間戳記 | AT_OCTET_STRING | FILETIME 類型的緩衝區,指定事件發生的時間。 此時間戳可用來唯一識別事件。 |
ipProtocol | AT_UINT32 | 傳輸層通訊協定,格式為UINT8。 |
LocalAddr | AT_SOCKADDR | 儲存在DIAG_SOCKADDR結構中的本機 IP 位址和埠。 |
RemoteAddr | AT_SOCKADDR | 遠端IP位址和埠,儲存在 DIAG_SOCKADDR 結構中。 |
userId | AT_OCTET_STRING | SID 類型的緩衝區,表示userid。 如果userId長度為0,則無法使用SID。 |
appId | AT_STRING | 儲存所擷取應用程式標識碼的緩衝區。 如果 appId 的值為 L“”,則無法使用應用程式識別碼。 |
處理 FPHC 事件
在向使用者建議診斷和修復資訊之前,FPHC 擴充功能應該會收集比 FPHC 通知所提供的更多數據。 您可以從 WFP 事件管理功能取得此資料。 這些函式會在顯示 Net Events 範例中示範。
SDK 中包含更詳細的事件管理範例。 您可以在 C:\Program Files\Microsoft SDKs\Windows\<version number>\Samples\NetDs\WFP\DiagEvents 底下的 SDK 安裝位置中找到範例的原始程式碼。 您可以從下載中心取得 Windows Vista SDK。
內建 FPHC 診斷
在沒有 FPHC 擴充功能的情況下,FPHC 可以診斷下列案例。 FPHC診斷的大部分連線失敗都會因為防火牆封鎖流量而發生。 IPsec 案例較不常見。
下表顯示一些導致 FPHC 診斷連線失敗的案例,以及傳遞給 NDF 的描述和修復資訊。
案例 | 低健康情況描述 | 修復資訊 |
---|---|---|
防火牆捨棄 | 此電腦上的防火牆設定會封鎖連線。 | 確認您的防火牆設定。 |
主要模式失敗 | 您無法連線,因為 IPsec 安全策略不符。 | 請連絡 IPsec 原則擁有者。 |
快速模式失敗 | 您無法連線,因為 IPsec 安全策略不符。 | 請連絡 IPsec 原則擁有者。 |
使用者模式失敗 | 您無法連線,因為 IPsec 安全策略不符。 | 請連絡 IPsec 原則擁有者。 |
認證失敗 | 您無法連線,因為此電腦上的跟證書授權單位 (CA) 不符合遠端電腦上的根 CA。 | 更新受信任的跟證書。 |
過期的憑證 | 用於 IPsec 驗證的憑證已過期。 | 要求憑證。 |
其他憑證失敗 | 找不到用於 IPsec 驗證的有效憑證。 | 要求憑證。 |
Kerberos 失敗 | 計算機不是此網域的一部分。 | 將此電腦加入網域。 |
預先共用金鑰 | 重設預先共用的金鑰。 | 重設預先共用的金鑰。 |