Partager via


Fonction FwpmTransactionBegin0 (fwpmu.h)

La fonction FwpmTransactionBegin0 commence une transaction explicite dans la session active.

Syntaxe

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

Paramètres

[in] engineHandle

Type : HANDLE

Handle pour une session ouverte sur le moteur de filtre. Appelez FwpmEngineOpen0 pour ouvrir une session sur le moteur de filtre.

[in] flags

Type : UINT32

Valeurs possibles :

Indicateur de transaction Signification
0
Commencez la transaction en lecture/écriture.
FWPM_TXN_READ_ONLY
Commencez la transaction en lecture seule.

Valeur retournée

Type : DWORD

Code/valeur de retour Description
ERROR_SUCCESS
0
La transaction a été démarrée avec succès.
code d’erreur FWP_E_*
0x80320001—0x80320039
Une erreur spécifique à la plateforme de filtrage Windows (PAM). Pour plus d’informations, consultez Codes d’erreur PAM .
code d’erreur RPC_*
0x80010001—0x80010122
Échec de la communication avec le moteur de pare-feu distant ou local.

Remarques

Cette fonction ne peut pas être appelée à partir d’une transaction. Elle échoue avec FWP_E_TXN_IN_PROGRESS. Pour plus d’informations sur les transactions, consultez Gestion des objets.

Pour une transaction en lecture seule, l’appelant a besoin d’un accès FWPM_ACTRL_BEGIN_READ_TXN au moteur de filtre. Pour une transaction en lecture/écriture, l’appelant a besoin d’un accès FWPM_ACTRL_BEGIN_WRITE_TXN au moteur de filtre. Pour plus d’informations, consultez Access Control.

FwpmTransactionBegin0 est une implémentation spécifique de FwpmTransactionBegin. Pour plus d’informations , consultez WFP Version-Independent Names and Targeting Specific Versions of Windows .

Exemples

L’exemple C++ suivant illustre l’encapsulation de la fonction FwpmFilterAdd0 dans une transaction 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;
}
// ----------------------------------------------------------------------

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête fwpmu.h
Bibliothèque Fwpuclnt.lib
DLL Fwpuclnt.dll

Voir aussi

FwpmTransactionAbort0

FwpmTransactionCommit0