다음을 통해 공유


FwpmTransactionBegin0 함수(fwpmu.h)

FwpmTransactionBegin0 함수는 현재 세션 내에서 명시적 트랜잭션을 시작합니다.

구문

DWORD FwpmTransactionBegin0(
  [in] HANDLE engineHandle,
  [in] UINT32 flags
);

매개 변수

[in] engineHandle

형식: HANDLE

필터 엔진에 대한 열린 세션에 대한 핸들입니다. FwpmEngineOpen0을 호출하여 필터 엔진에 대한 세션을 엽니다.

[in] flags

형식: UINT32

가능한 값은 다음과 같습니다.

트랜잭션 플래그 의미
0
읽기/쓰기 트랜잭션을 시작합니다.
FWPM_TXN_READ_ONLY
읽기 전용 트랜잭션을 시작합니다.

반환 값

형식:DWORD

반환 코드/값 설명
ERROR_SUCCESS
0
트랜잭션이 성공적으로 시작되었습니다.
FWP_E_* 오류 코드
0x80320001— 0x80320039
WFP(Windows 필터링 플랫폼) 관련 오류입니다. 자세한 내용은 WFP 오류 코드를 참조하세요 .
RPC_* 오류 코드
0x80010001— 0x80010122
원격 또는 로컬 방화벽 엔진과 통신하지 못했습니다.

설명

이 함수는 트랜잭션 내에서 호출할 수 없습니다. FWP_E_TXN_IN_PROGRESS 실패합니다. 트랜잭션에 대한 자세한 내용은 개체 관리를 참조하세요.

읽기 전용 트랜잭션의 경우 호출자는 필터 엔진에 대한 FWPM_ACTRL_BEGIN_READ_TXN 액세스 권한이 필요합니다. 읽기/쓰기 트랜잭션의 경우 호출자는 필터 엔진에 대한 FWPM_ACTRL_BEGIN_WRITE_TXN 액세스 권한이 필요합니다. 자세한 내용은 Access Control 참조하세요.

FwpmTransactionBegin0 은 FwpmTransactionBegin의 특정 구현입니다. 자세한 내용은 WFP Version-Independent 이름 및 특정 버전의 Windows 대상 지정 을 참조하세요.

예제

다음 C++ 예제에서는 FWP 트랜잭션에서 FwpmFilterAdd0 함수를 래핑하는 것을 보여 줍니다.

#include <windows.h>
#include <fwpmu.h>
#include <stdio.h>

#pragma comment(lib, "Fwpuclnt.lib")

void main()
{
    HANDLE engineHandle = NULL; 

    FWPM_FILTER0      fwpFilter;

    RtlZeroMemory(&fwpFilter, sizeof(FWPM_FILTER0));
    fwpFilter.layerKey = FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4;
    fwpFilter.action.type = FWP_ACTION_BLOCK;
    fwpFilter.weight.type = FWP_EMPTY;
    fwpFilter.numFilterConditions = 0;

    DWORD  result = ERROR_SUCCESS; 
    DWORD fwpTxStatus = ERROR_SUCCESS;

    printf("Opening filter engine.\n");
    result = FwpmEngineOpen0(NULL, RPC_C_AUTHN_WINNT, NULL, NULL, &engineHandle);
      if (result != ERROR_SUCCESS)
      {            
        printf("FwpmEngineOpen0 failed (%d).\n", result);
        return;
    }
             
      printf("Adding filter to permit traffic for Application 1.\n");
      fwpTxStatus = FwpmTransactionBegin0(engineHandle, NULL);
      if (fwpTxStatus != ERROR_SUCCESS)
      {            
        printf("FwpmTransactionBegin0 failed (%d).\n", fwpTxStatus);
        return;
    }

    result = FwpmFilterAdd0(engineHandle, &fwpFilter, NULL, NULL);
      if (result != ERROR_SUCCESS)
      {            
        printf("FwpmFilterAdd0 failed (%d).\n", result);
        return;
    }

    result = FwpmTransactionCommit0(engineHandle);
    if (result != ERROR_SUCCESS)
    {            
        printf("FwpmTransactionCommit0 failed (%d).\n", result);
        return;
    }
    else
    {
        printf("Filter transaction (adding a filter) committed successfully.\n");
    }

    return;
}
// ----------------------------------------------------------------------

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 fwpmu.h
라이브러리 Fwpuclnt.lib
DLL Fwpuclnt.dll

추가 정보

FwpmTransactionAbort0

FwpmTransactionCommit0