FwpmTransactionBegin0 関数 (fwpmu.h)
FwpmTransactionBegin0 関数は、現在のセッション内で明示的なトランザクションを開始します。
構文
DWORD FwpmTransactionBegin0(
[in] HANDLE engineHandle,
[in] UINT32 flags
);
パラメーター
[in] engineHandle
型: HANDLE
フィルター エンジンへの開いているセッションを処理します。 FwpmEngineOpen0 を呼び出して、フィルター エンジンへのセッションを開きます。
[in] flags
種類: UINT32
指定できる値
トランザクション フラグ | 意味 |
---|---|
|
読み取り/書き込みトランザクションを開始します。 |
|
読み取り専用トランザクションを開始します。 |
戻り値
型: DWORD
リターン コード/値 | Description |
---|---|
|
トランザクションが正常に開始されました。 |
|
Windows フィルタリング プラットフォーム (WFP) 固有のエラー。 詳細については、「 WFP エラー コード 」を参照してください。 |
|
リモートまたはローカルのファイアウォール エンジンとの通信に失敗しました。 |
注釈
この関数は、トランザクション内から呼び出すことはできません。 FWP_E_TXN_IN_PROGRESSで失敗します。 トランザクションの詳細については、「 オブジェクト管理 」を参照してください。
読み取り専用トランザクションの場合、呼び出し元 は フィルター エンジンFWPM_ACTRL_BEGIN_READ_TXNアクセスする必要があります。 読み取り/書き込みトランザクションの場合、呼び出し元はフィルター エンジンFWPM_ACTRL_BEGIN_WRITE_TXNアクセス する必要があります。 詳細については、「Access Control」を参照してください。
FwpmTransactionBegin0 は、FwpmTransactionBegin の特定の実装です。 詳細については、「 WFP Version-Independent 名と特定のバージョンの Windows を対象 とする」を参照してください。
例
次の C++ の例は、 FWP トランザクションで FwpmFilterAdd0 関数をラップする方法を示しています。
#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 |
ヘッダー | fwpmu.h |
Library | Fwpuclnt.lib |
[DLL] | Fwpuclnt.dll |