使用封包標記
圖說文字驅動程式可以標記感興趣的封包,並接收已標記封包所發生事件的通知。 Windows 7 和更新版本的 Windows 支援封包標記。
若要使用封包標記,圖說文字驅動程式必須實作 FWPS_NET_BUFFER_LIST_NOTIFY_FN0 或 FWPS_NET_BUFFER_LIST_NOTIFY_FN1 回呼函式。 此函式將會收到已標記封包的所有狀態通知。 在標記個別封包之前,圖說文字驅動程式必須先呼叫 FwpsNetBufferListGetTagForCoNtext0來取得特殊內容標記。 圖說文字驅動程式可以針對部分或所有標記的封包使用相同的內容標記。 例如,圖說文字驅動程式可能會使用不同的內容標記來區分標記封包的類型。
為了標記封包,圖說文字驅動程式會使用 NET_BUFFER_LIST 結構。 圖說文字驅動程式會呼叫 FwpsNetBufferListAssociateCoNtext0 來標記個別 NET_BUFFER_LIST 結構。 圖說文字驅動程式與封包相關聯的內容是任意不帶正負號的 64 位值。 觸發事件時, FWPS_NET_BUFFER_LIST_NOTIFY_FN0 或 FWPS_NET_BUFFER_LIST_NOTIFY_FN1回 呼會將內容當做輸入參數傳遞,讓圖說文字驅動程式可以識別個別標記的封包。 篩選引擎不會使用或評估內容。 它只會傳遞至回呼以供圖說文字驅動程式使用。
當封包離開堆疊時,內容會自動從標記的封包中移除。 不過,如果封包從未輸入 TCP/IP 堆疊,例如,在 NDIS 篩選驅動程式的情況下,必須藉由呼叫 FwpsNetBufferListRemoveCoNtext0 並將 netBufferList 參數設定為 Null來手動移除內容。
如果圖說文字需要提早中止標記作業,可以藉由呼叫 FwpsNetBufferListRemoveCoNtext0來移除內容。 移除內容通常會觸發 FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED 事件。 如需可觸發之事件的詳細資訊,請參閱 FWPS_NET_BUFFER_LIST_EVENT_TYPE0 列舉。 在某些情況下,不會觸發任何事件,例如當封包永遠不會進入 TCP/IP 堆疊進行處理時。
複製標記的封包時,圖說文字驅動程式可以將內容移動或複製到複製封包。 若要在複製) 的情況下移動內容 (,圖說文字驅動程式必須呼叫 FwpsNetBufferListRetrieveCoNtext0 , 並將 removeCoNtext 參數設定為 TRUE。 然後,內容可以與新的封包相關聯。 在重複) 的情況下複製內容 (的程式相同,不同之處在于FwpsNetBufferListRetrieveCoNtext0的removeCoNtext參數必須設定為FALSE。
您可以從 NDIS 篩選驅動程式擷取從 TCP/IP 層標記的封包。 反之亦然。 除了資料區段以外,封包標記不適用於未指出封包的資料流程層。
圖說文字驅動程式可以藉由呼叫FwpsNetBufferListRetrieveCoNtext0,擷取FWPS_NET_BUFFER_LIST_NOTIFY_FN0或FWPS_NET_BUFFER_LIST_NOTIFY_FN1函式外部封包的內容。 一般而言,圖說文字驅動程式會在其 classifyFn 回呼中擷取內容。
相關主題
FWPS_NET_BUFFER_LIST_EVENT_TYPE0
FWPS_NET_BUFFER_LIST_NOTIFY_FN0
FWPS_NET_BUFFER_LIST_NOTIFY_FN1
FwpsNetBufferListAssociateCoNtext0
FwpsNetBufferListGetTagForCoNtext0
FwpsNetBufferListRemoveCoNtext0