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失敗。 如需交易的詳細資訊,請參閱 物件管理。
通話端需要下列存取權限:
- 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 驅動程式套件 (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 |