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
篩選物件的安全性資訊。
[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。 如需交易的詳細資訊,請參閱 物件管理 。
通話端需要下列存取權限:
- FWPM_ACTRL_ADD 篩選容器的存取權
- 如果有任何) ,FWPM_ACTRL_ADD_LINK 存取提供者 (
- FWPM_ACTRL_ADD_LINK 存取適用層
- FWPM_ACTRL_ADD_LINK 存取適用的子層
- 如果有任何 ) ,FWPM_ACTRL_ADD_LINK註標 (的存取權
- 如果有任何) ,FWPM_ACTRL_ADD_LINK 存取提供者內容 (。
如需詳細資訊,請參閱 存取控制。
若要新增參考圖說文字的篩選,請依照下列順序叫用函式。
- 呼叫 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 |