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
반환 코드/값 | 설명 |
---|---|
ERROR_SUCCESS 0 |
필터가 추가되었습니다. |
ERROR_INVALID_SECURITY_DESCR 0x8007053A |
보안 설명자 구조체가 잘못되었습니다. 또는 필터 조건에 절대 형식의 보안 설명자가 포함됩니다. |
FWP_E_CALLOUT_NOTIFICATION_FAILED 0x80320037 |
호출자가 콜아웃 필터를 추가했고, 콜아웃은 알림 루틴에서 오류를 반환했습니다. |
FWP_E_* 오류 코드 0x80320001 — 0x80320039 |
WFP(Windows 필터링 플랫폼) 관련 오류입니다. 자세한 내용은 WFP 오류 코드를 참조하세요. |
RPC_* 오류 코드 0x80010001 — 0x80010122 |
원격 또는 로컬 방화벽 엔진과 통신하지 못했습니다. |
설명
FwpmFilterAdd0 은 시스템의 모든 필터링 계층에서 지정된 하위 계층에 필터를 추가합니다.
FWPM_FILTER0 구조체의 일부 필드는 호출자가 아닌 시스템에 의해 할당되며 FwpmFilterAdd0 호출에서 무시됩니다.
호출자가 NULL 보안 설명자를 제공하는 경우 시스템은 기본 보안 설명자를 할당합니다.
특정 위치에 대한 연결을 차단하려면 FWPM_LAYER_ALE_AUTH_CONNECT_V* 계층에서 로컬 주소를 지정하는 FWP_ACTION_BLOCK 필터를 추가하거나 FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V* 계층에서 로컬 주소를 지정하지 않고 FWP_ACTION_BLOCK 필터를 추가합니다.
참고
리소스 할당 계층에서 로컬 주소를 지정하면 주소, 주소 유형 및 포트가 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.
자세한 내용은 Access Control 참조하세요.
설명선 참조 필터를 추가하려면 다음 순서로 함수를 호출합니다.
- FwpsCalloutRegister0(WDK(Windows 드라이버 키트)에 설명됨)을 호출하여 필터 엔진에 설명서를 등록합니다.
- FwpmCalloutAdd0을 호출하여 시스템에 설명선 추가
- FwpmFilterAdd0을 호출하여 시스템에 대한 설명선 참조 필터를 추가합니다.
기본적으로 추가되었지만 아직 필터 엔진에 등록되지 않은 설명선 참조 필터는 차단 필터로 처리됩니다.
FwpmFilterAdd0 은 FwpmFilterAdd의 특정 구현입니다. 자세한 내용은 WFP 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 |