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
フィルター オブジェクトに関するセキュリティ情報。
[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では失敗します。 トランザクションの詳細については、「 オブジェクト管理 」を参照してください。
呼び出し元には、次のアクセス権が必要です。
- フィルターのコンテナーへのアクセスをFWPM_ACTRL_ADDする
- プロバイダーへのアクセスをFWPM_ACTRL_ADD_LINKする (存在する場合)
- 該当するレイヤーへのアクセスをFWPM_ACTRL_ADD_LINKする
- 適用可能なサブレイヤーへのアクセスをFWPM_ACTRL_ADD_LINKする
- 吹き出しへのFWPM_ACTRL_ADD_LINKアクセス (存在する場合)
- プロバイダー コンテキストへのアクセスをFWPM_ACTRL_ADD_LINKします (存在する場合)。
詳細については、「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 |