Share via


Função FwpmTransactionBegin0 (fwpmu.h)

A função FwpmTransactionBegin0 inicia uma transação explícita dentro da sessão atual.

Sintaxe

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

Parâmetros

[in] engineHandle

Tipo: HANDLE

Identificador de uma sessão aberta para o mecanismo de filtro. Chame FwpmEngineOpen0 para abrir uma sessão para o mecanismo de filtro.

[in] flags

Tipo: UINT32

Valores possíveis:

Sinalizador de transação Significado
0
Inicie a transação de leitura/gravação.
FWPM_TXN_READ_ONLY
Iniciar transação somente leitura.

Retornar valor

Tipo: DWORD

Valor/código retornado Descrição
ERROR_SUCCESS
0
A transação foi iniciada com êxito.
código de erro FWP_E_*
0x80320001 — 0x80320039
Um erro específico da Plataforma de Filtragem do Windows (WFP). Consulte Códigos de erro do WFP para obter detalhes.
código de erro RPC_*
0x80010001 — 0x80010122
Falha ao se comunicar com o mecanismo de firewall remoto ou local.

Comentários

Essa função não pode ser chamada de dentro de uma transação. Ele falhará com FWP_E_TXN_IN_PROGRESS. Consulte Gerenciamento de Objetos para obter mais informações sobre transações.

Para uma transação somente leitura, o chamador precisa FWPM_ACTRL_BEGIN_READ_TXN acesso ao mecanismo de filtro. Para uma transação de leitura/gravação, o chamador precisa FWPM_ACTRL_BEGIN_WRITE_TXN acesso ao mecanismo de filtro. Consulte Controle de Acesso para obter mais informações.

FwpmTransactionBegin0 é uma implementação específica de FwpmTransactionBegin. Consulte Nomes de Version-Independent WFP e Direcionamento de versões específicas do Windows para obter mais informações.

Exemplos

O exemplo C++ a seguir ilustra como encapsular a função FwpmFilterAdd0 em uma transação FWP.

#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;
}
// ----------------------------------------------------------------------

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho fwpmu.h
Biblioteca Fwpuclnt.lib
DLL Fwpuclnt.dll

Confira também

FwpmTransactionAbort0

FwpmTransactionCommit0