FwpmFilterAdd0 関数 (fwpmk.h)
FwpmFilterAdd0 関数は、新しいフィルター オブジェクトをシステムに追加します。
構文
NTSTATUS FwpmFilterAdd0(
[in] HANDLE engineHandle,
[in] const FWPM_FILTER0 *filter,
[in, optional] PSECURITY_DESCRIPTOR sd,
[out, optional] UINT64 *id
);
パラメーター
[in] engineHandle
フィルター エンジンへの開いているセッションのハンドル。 FwpmEngineOpen0 を呼び出して、フィルター エンジンへのセッションを開きます。
[in] filter
追加するフィルター オブジェクト。
[in, optional] sd
フィルター オブジェクトに関するセキュリティ情報。
[out, optional] id
このフィルターのランタイム識別子。
戻り値
戻りコード/値 | 形容 |
---|---|
ERROR_SUCCESS 0 |
フィルターが正常に追加されました。 |
ERROR_INVALID_SECURITY_DESCR 0x8007053A |
セキュリティ記述子の構造が無効です。 または、フィルター条件に絶対形式のセキュリティ記述子が含まれています。 |
FWP_E_CALLOUT_NOTIFICATION_FAILED 0x80320037 |
呼び出し元は吹き出しフィルターを追加し、吹き出しは通知ルーチンからエラーを返しました。 |
FWP_E_* エラー コード 0x80320001 — 0x80320039 |
Windows フィルタリング プラットフォーム (WFP) 固有のエラー。 詳細については、「WFP エラー コードの」を参照してください。 |
RPC_* エラー コード 0x80010001 — 0x80010122 |
リモートまたはローカルのファイアウォール エンジンとの通信に失敗しました。 |
その他の NTSTATUS コード | エラーが発生しました。 |
備考
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 します (存在する場合)。
詳細については、「アクセス制御の」を参照してください。
吹き出しを参照するフィルターを追加するには、次の順序で関数を呼び出します。
- 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 以降で使用できます。 |
ターゲット プラットフォーム の |
万国 |
ヘッダー | fwpmk.h |
ライブラリ | fwpkclnt.lib |
IRQL | <= PASSIVE_LEVEL |
関連項目
- FwpsCalloutRegister0
- FwpmCalloutAdd0 を
する - FWPM_FILTER0
- 管理機能の
- WFP 関数 を
する - WFP Version-Independent 名の と Windows の特定のバージョンのターゲット設定