Share via


FwpmFilterAdd0 函式 (fwpmu.h)

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

語法

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

參數

[in] engineHandle

類型: HANDLE

篩選引擎開啟會話的句柄。 呼叫 FwpmEngineOpen0 以開啟篩選引擎的會話。

[in] filter

類型: FWPM_FILTER0*

要加入的篩選物件。

[in, optional] sd

類型: SECURITY_DESCRIPTOR

篩選物件的安全性資訊。

[out, optional] id

類型: UINT64*

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

傳回值

類型: DWORD

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

備註

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 Driver Kit (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 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 fwpmu.h
程式庫 Fwpuclnt.lib
Dll Fwpuclnt.dll

另請參閱

FWPM_FILTER0

管理函式

WFP 函式