FwpsPendOperation0 函式 (fwpsk)
FwpsPendOperation0函式是由標注呼叫,以暫止完成另一項作業的封包處理。
語法
NTSTATUS FwpsPendOperation0(
[in] HANDLE completionHandle,
[out] HANDLE *completionContext
);
參數
[in] completionHandle
暫止目前篩選作業所需的完成控制碼。 此參數是從傳遞至標注驅動程式classifyFn函式FWPS_INCOMING_METADATA_VALUES0結構的completionHandle成員取得。
[out] completionContext
這個暫止作業的完成內容控制碼。 當標注準備好繼續進行封包處理時,它會呼叫 FwpsCompleteOperation0 函式,並將此參數的值做為輸入的 completionCoNtext 參數。
傳回值
FwpsPendOperation0函式會傳回下列其中一個 NTSTATUS 程式碼。
| 傳回碼 | Description |
|---|---|
|
已成功暫止封包處理。 |
|
已在重新授權分類作業中對 FwpsPendOperation0 進行呼叫。 如需詳細資訊,請參閱<備註>。 |
|
一或多個參數無效。 |
|
TCP/IP 網路堆疊尚未就緒,無法允許此操作。 |
|
發生錯誤。 |
備註
注標應保留 completionCoNtext 參數值,直到它繼續進行封包處理。 當提示呼叫此函式的作業已完成時,標注應呼叫 FwpsCompleteOperation0 函式,並將它傳遞給它的 completionCoNtext 參數值。
注標只能呼叫這個函式,以暫止源自 FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_ xxx、FWPM_LAYER_ALE_AUTH_LISTEN_ Xxx或 FWPM_LAYER_ALE_AUTH_CONNECT_ Xxx 篩選圖層的封包。 當注標必須在其中一個圖層上執行處理時,注標可以暫止封包上目前的處理作業,這可能需要較長的間隔才能完成,或應該發生在 IRQL = PASSIVE_LEVEL 如果目前的 IRQL > PASSIVE_LEVEL。
若要完成先前在 FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx 層暫止的連接,標注驅動程式必須 reinject 在該層複製的封包,以及呼叫 FwpsCompleteOperation0 函式。
為了能夠暫止封包處理,callout 驅動程式的classifyFn函式應該將FWPS_CLASSIFY_OUT0結構的actionType成員設定為 FWP_ACTION_BLOCK,並將旗標成員設定為 FWPS_CLASSIFY_OUT_FLAG_ABSORB。
FwpsCompleteOperation0函式執行之後,會重新驗證擱置的連接。 TCP 連接(如果允許)是藉由完成交握作業所建立,但是非 TCP 連線只會建立狀態專案。 當 FwpsPendOperation0 函式完成時,所有擱置中的封包資料都會從記憶體中清除,因此應用程式必須在執行 FwpsCompleteOperation0 後重新傳輸這些封包。 標注可以緩衝這類資料,並代表其 reinject 資料。
只有初始應用層強制執行 (ALE) flow 授權可以藉由呼叫 FwpsPendOperation0 和 FwpsCompleteOperation0來延後。 如果已重新授權 ALE 流程,就會設定 FWP_CONDITION_FLAG_IS_REAUTHORIZE 旗標。 如果設定了 FWP_CONDITION_FLAG_IS_REAUTHORIZE 旗標,則從 FWPM_LAYER_ALE_AUTH_CONNECT_ xxx或 FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx 篩選層的FwpsPendOperation0呼叫會失敗,而且會傳回 STATUS_FWP_CANNOT_PEND 狀態碼。 如需詳細資訊,請參閱 Windows SDK 中的 ALE 重新授權。
規格需求
| 最低支援的用戶端 | 從 Windows Vista 開始提供。 |
| 目標平台 | 通用 |
| 標頭 | fwpsk (包含 Fwpsk) |
| 程式庫 | Fwpkclnt .lib |
| IRQL | <= DISPATCH_LEVEL |
另請參閱
意見反應
提交並檢視相關的意見反應