以非同步方式處理注標分類
透過從classifyFn圖說文字函式傳回動作類型FWP_ACTION_PERMIT、FWP_ACTION_CONTINUE或FWP_ACTION_BLOCK,可授權或拒絕網路作業,或拒絕網路封包。 圖說文字驅動程式通常無法從 其 classifyFn 函式傳回檢查決策,直到指定的資訊,例如可分類的欄位、中繼資料或封包,可以轉送處理至另一個元件,例如使用者模式應用程式。 在這些情況下,可能需要稍後以非同步方式進行決策。
非同步處理的一般規則
其支援 分類Fn 圖說文字函式的非同步處理。 不過,執行這項操作的機制會根據不同的層級而有所不同。
非同步 ALE 分類
圖說文字驅動程式必須從classifyFn呼叫FwpsPendOperation0函式。 非同步作業必須完成,並呼叫 FwpsCompleteOperation0 函式 。
非同步封包分類
圖說文字驅動程式應該從classifyFn函式傳回FWP_ACTION_BLOCK,並設定FWPS_CLASSIFY_OUT_FLAG_ABSORB旗標。 必須參考或複製網路封包。 非同步作業會藉由重新Ject 所複製或修改的封包,或以無訊息方式捨棄封包來完成。
包含封包的非同步 ALE 分類
會使用前兩個程式的組合:分類作業會寫入並複製封包,而稍後會完成 對 classifyFn 的呼叫,並捨棄複製的封包。
特殊案例和考慮
ALE Connect 與接收/接受層
呼叫 FwpsCompleteOperation0 以在 ALE 連接層完成畫筆分類作業 , (FWPS_LAYER_ALE_AUTH_CONNECT_V4 或 FWPS_LAYER_ALE_AUTH_CONNECT_V6) 時,會在個別的 ALE 連接層觸發 ALE 重新授權分類作業。 圖說文字驅動程式應該從這個重新授權分類作業傳回檢查決策。 您可以檢查是否已設定 FWP_CONDITION_FLAG_IS_REAUTHORIZE 旗標,以偵測 ALE 重新授權分類作業。
圖說文字驅動程式必須維護每個手寫筆ALE_AUTH_CONNECT分類作業的唯一狀態,如此一來,就可以在 FwpsCompleteOperation0觸發的重新授權期間查閱每個分類作業的檢查決策。 例如,如果封包在手寫式ALE_AUTH_CONNECT分類 (作業期間被參考或複製,例如,對於非 TCP 連線) ,在重新授權發生之後,就可以重新執行這些封包。
當在 ALE 接收/接受層的分類作業期間呼叫 FwpsCompleteOperation0 時, (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 或 FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6) , FwpsCompleteOperation0 不會觸發 ALE 重新授權。 當複製的封包重新傳入時,如果修改不足以略過篩選,則會再次呼叫 classifyFn 。 允許從ALE_RECV_ACCEPT層自我插入的複製,有效地授權連入連線。 如果不允許連入連線,請在呼叫 FwpsCompleteOperation0之後捨棄傳入封包。
ALE 重新授權
例如,圖說文字驅動程式可以在 ALE 連線或接收/接受層重新分類,例如原則變更 (、在層新增或移除篩選) 、偵測新的抵達介面,以及使用 IPsec 重新編制連線的索引鍵。 呼叫 FwpsCompleteOperation0無法撰寫這類重新授權,而且不需要這麼做。 圖說文字驅動程式應該使用先前列出的規則來處理重新授權期間所指出的封包。
請注意,傳入和傳出封包都可以在ALE_AUTH_CONNECT或ALE_RECV_ACCEPT層重新授權。 例如,傳入封包可以在ALE_AUTH_CONNECT層重新授權。 圖說文字驅動程式不得假設封包的方向與連線的方向相同。
ALE_FLOW_ESTABLISHED層
這些層級不支援非同步處理 (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 或 FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6) 。
INBOUND_TRANSPORT層
圖說文字驅動程式不得對需要 ALE 分類處理的傳入 (輸入) 傳輸層 (FWPS_LAYER_INBOUND_TRANSPORT_V4或FWPS_LAYER_INBOUND_TRANSPORT_V6) 進行 ALE 分類處理的封包執行非同步處理。 這樣做可能會干擾流程建立。 在傳入傳輸層呼叫 classifyFn 圖說文字函式時,它會為需要 ALE 分類處理的封包 設定FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED 旗標。 圖說文字驅動程式應該允許來自INBOUND_TRANSPORT層的這類封包,而且應該延遲處理它們,直到到達ALE_RECV_ACCEPT層為止。
STREAM 層
在資料流程層 (FWPS_LAYER_STREAM_V4 或 FWPS_LAYER_STREAM_V6) ,會指出 TCP 資料區段,而不是 IP 或 TCP 標頭。 串流層也是一個 對 classifyFn 圖說文字函式呼叫中可以指出 net buffer 清單鏈結的位置。 在串流層圖說文字中,其提供特製化複製和插入函式 FwpsCloneStreamData0 和 FwpsStreamInjectAsync0。
由於串流層資料的排序傳遞本質,圖說文字驅動程式必須繼續複製和吸收資料,只要有任何資料流程資料仍在擱置中。 混合給定資料流程的非同步和同步作業可能會導致未定義的行為。