Condividi tramite


Funzione FwpmTransactionBegin0 (fwpmu.h)

La funzione FwpmTransactionBegin0 inizia una transazione esplicita all'interno della sessione corrente.

Sintassi

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

Parametri

[in] engineHandle

Tipo: HANDLE

Handle per una sessione aperta al motore di filtro. Chiamare FwpmEngineOpen0 per aprire una sessione al motore di filtro.

[in] flags

Tipo: UINT32

Valori possibili:

Flag delle transazioni Significato
0
Iniziare la transazione di lettura/scrittura.
FWPM_TXN_READ_ONLY
Iniziare la transazione di sola lettura.

Valore restituito

Tipo: DWORD

Codice/valore restituito Descrizione
ERROR_SUCCESS
0
La transazione è stata avviata correttamente.
FWP_E_* codice di errore
0x80320001: 0x80320039
Errore specifico di Windows Filtering Platform (WFP). Per informazioni dettagliate, vedere Codici di errore WFP .
RPC_* codice di errore
0x80010001: 0x80010122
Non è possibile comunicare con il motore firewall remoto o locale.

Commenti

Questa funzione non può essere chiamata dall'interno di una transazione. Avrà esito negativo con FWP_E_TXN_IN_PROGRESS. Per altre informazioni sulle transazioni, vedere Gestione oggetti .

Per una transazione di sola lettura, il chiamante deve FWPM_ACTRL_BEGIN_READ_TXN l'accesso al motore di filtro. Per una transazione di lettura/scrittura, il chiamante deve FWPM_ACTRL_BEGIN_WRITE_TXN l'accesso al motore di filtro. Per altre informazioni, vedere Controllo di accesso.

FwpmTransactionBegin0 è un'implementazione specifica di FwpmTransactionBegin . Per altre informazioni , vedere Nomi Version-Independent WFP e Versioni specifiche di Windows .

Esempio

Nell'esempio C++ seguente viene illustrato il wrapping della funzione FwpmFilterAdd0 in una transazione 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;
}
// ----------------------------------------------------------------------

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione fwpmu.h
Libreria Fwpuclnt.lib
DLL Fwpuclnt.dll

Vedi anche

FwpmTransactionAbort0

FwpmTransactionCommit0