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