FwpmTransactionBegin0 函数 (fwpmu.h)

FwpmTransactionBegin0 函数在当前会话中开始显式事务。

语法

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

参数

[in] engineHandle

类型: 句柄

筛选器引擎的打开会话的句柄。 调用 FwpmEngineOpen0 以打开与筛选器引擎的会话。

[in] flags

类型: UINT32

可能的值:

事务标志 含义
0
开始读/写事务。
FWPM_TXN_READ_ONLY
开始只读事务。

返回值

类型:DWORD

返回代码/值 说明
ERROR_SUCCESS
0
事务已成功启动。
FWP_E_* 错误代码
0x80320001 — 0x80320039
Windows 筛选平台 (WFP) 特定错误。 有关详细信息 ,请参阅 WFP 错误代码
RPC_* 错误代码
0x80010001 — 0x80010122
无法与远程或本地防火墙引擎通信。

注解

不能从事务内部调用此函数。 它将失败并 出现FWP_E_TXN_IN_PROGRESS。 有关事务的详细信息,请参阅 对象管理

对于只读事务,调用方需要 FWPM_ACTRL_BEGIN_READ_TXN 筛选器引擎的访问权限。 对于读/写事务,调用方需要 FWPM_ACTRL_BEGIN_WRITE_TXN 筛选器引擎的访问权限。 有关详细信息,请参阅访问控制

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
Library Fwpuclnt.lib
DLL Fwpuclnt.dll

另请参阅

FwpmTransactionAbort0

FwpmTransactionCommit0