共用方式為


使用封包標記

攔截驅動程式可以標記需要關注的封包,並接收發生在這些標記封包上的事件通知。 Windows 7 和更新版本的 Windows 支援封包標記。

若要使用封包標記,註標驅動程式必須實作 FWPS_NET_BUFFER_LIST_NOTIFY_FN0FWPS_NET_BUFFER_LIST_NOTIFY_FN1 回呼函式。 此函式將會接收已標記封包的所有狀態通知。 在標記個別封包之前,回呼驅動程式必須藉由呼叫 FwpsNetBufferListGetTagForContext0來取得特殊內容標記。 呼叫驅動程式可對部分或全部已標記的封包使用相同的上下文標籤。 例如,回呼驅動程式可能會使用不同的上下文標記來區分標記封包的類型。

若要標籤封包,回呼驅動程式會使用 NET_BUFFER_LIST 結構。 圖說驅動程式會呼叫 FwpsNetBufferListAssociateContext0,來標記個別的 NET_BUFFER_LIST 結構。 外掛驅動程式與封包相關聯的上下文是任意的無符號 64 位元值。 觸發事件時,FWPS_NET_BUFFER_LIST_NOTIFY_FN0FWPS_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。 然後上下文可以與新的封包相關聯。 複製內容(在重複的情況下)的過程相同,只是 FwpsNetBufferListRetrieveContext0removeContext 參數必須設定為 FALSE

被 TCP/IP 層標記的封包可以從 NDIS 篩選驅動程式中擷取。 反轉也是真的。 封包標記無法從流層取得,其中除了資料段外不會標示任何封包。

圖說文字驅動程式可以藉由呼叫 FwpsNetBufferListRetrieveContext0 ,來擷取 FWPS_NET_BUFFER_LIST_NOTIFY_FN0FWPS_NET_BUFFER_LIST_NOTIFY_FN1 函式外部封包的內容。 通常,呼叫驅動程式會在其 分類Fn 回呼中檢索內容。

分類Fn

FWPS_NET_BUFFER_LIST_EVENT_TYPE0

FWPS_NET_BUFFER_LIST_NOTIFY_FN0

FWPS_NET_BUFFER_LIST_NOTIFY_FN1

FwpsNetBufferListAssociateContext0

FwpsNetBufferListGetTagForContext0

FwpsNetBufferListRemoveContext0

FwpsNetBufferListRetrieveContext0

NET_BUFFER_LIST

NDIS 篩選驅動程式