Функция 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
Ошибка, определяемая платформой фильтрации Windows (WFP). Дополнительные сведения см. в разделе Коды ошибок ВПП .
Код ошибки RPC_*
0x80010001 — 0x80010122
Сбой связи с подсистемой удаленного или локального брандмауэра.

Комментарии

Эту функцию нельзя вызвать из транзакции. При FWP_E_TXN_IN_PROGRESS произойдет сбой. Дополнительные сведения о транзакциях см. в разделе Управление объектами.

Для транзакции, доступной только для чтения, вызывающему объекту требуется FWPM_ACTRL_BEGIN_READ_TXN доступ к механизму фильтрации. Для транзакции чтения и записи вызывающему объекту требуется FWPM_ACTRL_BEGIN_WRITE_TXN доступ к подсистеме фильтрации. Дополнительные сведения см. в разделе контроль доступа.

FwpmTransactionBegin0 — это конкретная реализация FwpmTransactionBegin. Дополнительные сведения см. в разделах ИМЕНА Version-Independent ВПП и Выбор конкретных версий Windows .

Примеры

В следующем примере C++ показана упаковка функции FwpmFilterAdd0 в транзакцию 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;
}
// ----------------------------------------------------------------------

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header fwpmu.h
Библиотека Fwpuclnt.lib
DLL Fwpuclnt.dll

См. также раздел

FwpmTransactionAbort0

FwpmTransactionCommit0