Функция FwpmTransactionBegin0 (fwpmu.h)
Функция FwpmTransactionBegin0 начинает явную транзакцию в текущем сеансе.
Синтаксис
DWORD FwpmTransactionBegin0(
[in] HANDLE engineHandle,
[in] UINT32 flags
);
Параметры
[in] engineHandle
Тип: HANDLE
Дескриптор открытого сеанса для подсистемы фильтрации. Вызовите FwpmEngineOpen0 , чтобы открыть сеанс для подсистемы фильтрации.
[in] flags
Тип: UINT32
Возможные значения:
Флаг транзакции | Значение |
---|---|
|
Начните транзакцию чтения и записи. |
|
Начать транзакцию только для чтения. |
Возвращаемое значение
Тип: DWORD
Возвращаемый код/значение | Описание |
---|---|
|
Транзакция успешно запущена. |
|
Ошибка, определяемая платформой фильтрации Windows (WFP). Дополнительные сведения см. в разделе Коды ошибок ВПП . |
|
Сбой связи с подсистемой удаленного или локального брандмауэра. |
Комментарии
Эту функцию нельзя вызвать из транзакции. При 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 |