다음을 통해 공유


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

반환 코드/값 설명
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 실패합니다. 트랜잭션에 대한 자세한 내용은 개체 관리를 참조하세요.

호출자에게는 다음 액세스 권한이 필요합니다.

자세한 내용은 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

추가 정보

FWPM_FILTER0

관리 함수

WFP 함수