次の方法で共有


FwpmFilterAdd0 関数 (fwpmu.h)

FwpmFilterAdd0 関数は、新しいフィルター オブジェクトをシステムに追加します。

構文

DWORD FwpmFilterAdd0(
  [in]            HANDLE               engineHandle,
  [in]            const FWPM_FILTER0   *filter,
  [in, optional]  PSECURITY_DESCRIPTOR sd,
  [out, optional] UINT64               *id
);

パラメーター

[in] engineHandle

型: HANDLE

フィルター エンジンへの開いているセッションを処理します。 FwpmEngineOpen0 を呼び出して、フィルター エンジンへのセッションを開きます。

[in] filter

種類: FWPM_FILTER0*

追加するフィルター オブジェクト。

[in, optional] sd

種類: SECURITY_DESCRIPTOR

フィルター オブジェクトに関するセキュリティ情報。

[out, optional] id

型: UINT64*

このフィルターのランタイム識別子。

戻り値

型: DWORD

リターン コード/値 説明
ERROR_SUCCESS
0
フィルターが正常に追加されました。
ERROR_INVALID_SECURITY_DESCR
0x8007053A
セキュリティ記述子構造が無効です。 または、フィルター条件に絶対形式のセキュリティ記述子が含まれています。
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
呼び出し元は吹き出しフィルターを追加し、吹き出しは通知ルーチンからエラーを返しました。
FWP_E_* エラー コード
0x80320001 — 0x80320039
Windows フィルタリング プラットフォーム (WFP) 固有のエラー。 詳細については、「 WFP エラー コード 」を参照してください。
RPC_* エラー コード
0x80010001 — 0x80010122
リモートまたはローカルのファイアウォール エンジンとの通信に失敗しました。

注釈

FwpmFilterAdd0 は 、システム内のすべてのフィルターレイヤーで、指定したサブレイヤーにフィルターを追加します。

FWPM_FILTER0構造体の一部のフィールドは、呼び出し元ではなくシステムによって割り当てられ、FwpmFilterAdd0 の呼び出しでは無視されます。

呼び出し元が NULL セキュリティ記述子を提供する場合、システムは既定のセキュリティ記述子を割り当てます。

特定の場所への接続をブロックするには、FWPM_LAYER_ALE_AUTH_CONNECT_V* レイヤーでローカル アドレスを指定するFWP_ACTION_BLOCK フィルターを追加するか、FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V* レイヤーでローカル アドレスを指定せずにFWP_ACTION_BLOCK フィルターを追加します。

注意

リソース割り当てレイヤーでローカル アドレスが指定されている場合、アドレス、アドレスの種類、ポートが FWP_EMPTYとして返される可能性があるため、暗黙的なバインドは成功します。

FWPM_FILTER0構造体では、ブート時または永続的なフィルターとしてフィルターにラベルを付けることができます。 ブート時フィルターは、TCP/IP ドライバーの起動時に基本フィルター エンジン (BFE) に追加され、BFE の初期化が完了すると削除されます。 永続オブジェクトは、BFE の開始時に追加されます。

この関数は、読み取り専用トランザクション内から呼び出すことはできません。 FWP_E_INCOMPATIBLE_TXNでは失敗します。 トランザクションの詳細については、「 オブジェクト管理 」を参照してください。

呼び出し元には、次のアクセス権が必要です。

詳細については、「Access Control」を参照してください。

吹き出しを参照するフィルターを追加するには、次の順序で関数を呼び出します。

  • FwpsCalloutRegister0 (Windows Driver Kit (WDK) に記載されている) を呼び出して、吹き出しをフィルター エンジンに登録します。
  • FwpmCalloutAdd0 を呼び出して、吹き出しをシステムに追加します。
  • FwpmFilterAdd0 を呼び出して、吹き出しを参照するフィルターをシステムに追加します。

既定では、追加されたがフィルター エンジンにまだ登録されていない吹き出しを参照するフィルターは、ブロック フィルターとして扱われます。

FwpmFilterAdd0 は、FwpmFilterAdd の特定の実装です。 詳細については、「 WFP Version-Independent 名と特定のバージョンの Windows を対象 とする」を参照してください。

次の C++ の例は、 FwpmFilterAdd0 を使用してフィルターを初期化して追加する方法を示しています。
具体的には、すべてのアプリケーションの IP V4 上のトラフィックをブロックします。


// Add filter to block traffic on IP V4 for all applications. 
//
FWPM_FILTER0      fwpFilter;
FWPM_SUBLAYER0    fwpFilterSubLayer;  

RtlZeroMemory(&fwpFilter, sizeof(FWPM_FILTER0));

fwpFilter.layerKey = FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4;
fwpFilter.action.type = FWP_ACTION_BLOCK;

if (&fwpFilterSubLayer.subLayerKey != NULL)
    fwpFilter.subLayerKey = fwpFilterSubLayer.subLayerKey;

fwpFilter.weight.type = FWP_EMPTY; // auto-weight.
fwpFilter.numFilterConditions = 0; // this applies to all application traffic
fwpFilter.displayData.name = L"Receive/Accept Layer Block";
fwpFilter.displayData.description = L"Filter to block all inbound connections.";

printf("Adding filter to block all inbound connections.\n");
result = FwpmFilterAdd0(engineHandle, &fwpFilter, NULL, NULL);

if (result != ERROR_SUCCESS)
    printf("FwpmFilterAdd0 failed. Return value: %d.\n", result);
else
    printf("Filter added successfully.\n");

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー fwpmu.h
Library Fwpuclnt.lib
[DLL] Fwpuclnt.dll

こちらもご覧ください

FWPM_FILTER0

管理機能

WFP 関数