共用方式為


FwpmFilterAdd0 函式 (fwpmk.h)

FwpmFilterAdd0 函式會將新的篩選物件新增至系統。

語法

NTSTATUS FwpmFilterAdd0(
  [in]            HANDLE               engineHandle,
  [in]            const FWPM_FILTER0   *filter,
  [in, optional]  PSECURITY_DESCRIPTOR sd,
  [out, optional] UINT64               *id
);

參數

[in] engineHandle

處理篩選引擎開啟的會話。 呼叫 FwpmEngineOpen0,以開啟篩選引擎的會話。

[in] filter

要加入的篩選物件。

[in, optional] sd

篩選物件的安全性資訊。

[out, optional] id

此篩選的運行時間識別碼。

傳回值

傳回碼/值 描述
ERROR_SUCCESS
0
已成功新增篩選。
ERROR_INVALID_SECURITY_DESCR
0x8007053A
安全性描述元結構無效。 或者,篩選條件包含絕對格式的安全性描述元。
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
呼叫端新增註標篩選,而圖說文字會從通知例程傳回錯誤。
FWP_E_* 錯誤碼
0x80320001— 0x80320039
Windows 篩選平臺 (WFP) 特定錯誤。 如需詳細資訊,請參閱 WFP 錯誤碼
RPC_* 錯誤碼
0x80010001— 0x80010122
無法與遠端或本機防火牆引擎通訊。
其他 NTSTATUS 代碼 發生錯誤。

言論

FwpmFilterAdd0 會將篩選新增至系統中每個篩選層的指定子層。

FWPM_FILTER0 結構中的某些欄位是由系統指派,而不是呼叫者,而且會在呼叫 FwpmFilterAdd0 呼叫中忽略。

如果呼叫端提供 NULL 安全性描述元,系統會指派預設的安全性描述元。

若要封鎖特定位置的連線,請新增 FWP_ACTION_BLOCK 篩選條件,以指定 FWPM_LAYER_ALE_AUTH_CONNECT_V* 層的本機位址,或新增 FWP_ACTION_BLOCK 篩選,而不需在 FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V* 圖層指定本機位址。

如果在資源指派層指定本機位址,則隱含系結會成功,因為位址、位址類型和埠可能會以 FWP_EMPTY傳回。

FWPM_FILTER0 結構可以將篩選標記為開機時間或持續性篩選。 啟動 TCP/IP 驅動程序時,開機時間篩選會新增至基底篩選引擎 (BFE),並在 BFE 完成初始化後移除。 BFE 啟動時會新增持續性物件。

無法從只讀交易內呼叫此函式,因為 FWP_E_INCOMPATIBLE_TXN失敗。 如需交易的詳細資訊,請參閱 物件管理

通話端需要下列存取權限:

如需詳細資訊,請參閱 訪問控制

若要新增參考圖說文字的篩選條件,請依下列順序叫用函式。

  • 呼叫 FwpsCalloutRegister0 (記載於 Windows 驅動程式套件 (WDK)] 以向篩選引擎註冊圖說文字。
  • 呼叫 FwpmCalloutAdd0,將圖說文字新增至系統。
  • 呼叫 FwpmFilterAdd0,以將參考圖說文字的篩選新增至系統。

根據預設,參考已新增但尚未向篩選引擎註冊的圖說文字的篩選,會被視為封鎖篩選條件。

FwpmFilterAdd0 是 FwpmFilterAdd 的特定實作。 如需詳細資訊,請參閱 糧食計劃署 Version-Independent 名稱和以特定版本的 Windows 為目標。

例子

下列C++範例示範如何使用 FwpmFilterAdd0 來初始化和新增篩選,以針對特定所有應用程式封鎖IP V4上的流量。

// Add filter to block traffic on IP V4 for all applications. 
//
FWPM_FILTER0      fwpFilter;
FWPM_SUBLAYER0    fwpFilterSubLayer;  

RtlZeroMemory(&fwpFilter, sizeof(FWPM_FILTER0));

fwpFilter.layerKey = FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4;
fwpFilter.action.type = FWP_ACTION_BLOCK;

if (&fwpFilterSubLayer.subLayerKey != NULL)
    fwpFilter.subLayerKey = fwpFilterSubLayer.subLayerKey;

fwpFilter.weight.type = FWP_EMPTY; // auto-weight.
fwpFilter.numFilterConditions = 0; // this applies to all application traffic
fwpFilter.displayData.name = L"Receive/Accept Layer Block";
fwpFilter.displayData.description = L"Filter to block all inbound connections.";

printf("Adding filter to block all inbound connections.\n");
result = FwpmFilterAdd0(engineHandle, &fwpFilter, NULL, NULL);

if (result != ERROR_SUCCESS)
    printf("FwpmFilterAdd0 failed. Return value: %d.\n", result);
else
    printf("Filter added successfully.\n");

要求

要求 價值
最低支援的用戶端 從 Windows Vista 開始提供。
目標平臺 普遍
標頭 fwpmk.h
連結庫 fwpkclnt.lib
IRQL <= PASSIVE_LEVEL

另請參閱