WFP API

Windows フィルタリング プラットフォーム (WFP) API は、次のコンポーネントに分かれています。

コンポーネント 説明 ヘッダー ファイル
Callout API (FWPS)${REMOVE}$
吹き出しで使用されるデータ型メモこれらのデータ型は、Microsoft Windows Driver Development Kit (DDK) に記載されています。
fwpstypes.h
fwpstypes.idl
吹き出しを実装するために使用される関数列挙型メモこれらの関数と列挙型については、DDK に記載されています。
fwpsu.h
fwpsk.h
IKE/AuthIP API (IKEEXT)${REMOVE}$
IKE および AuthIP メイン モード (MM) ポリシーとセキュリティの関連付けを管理するために使用される列挙型構造体
iketypes.h
iketypes.idl
IKE と AuthIP MM のポリシーとセキュリティの関連付けを管理するために使用される関数
fwpmu.h
fwpmk.h
IPsec API (IPSEC)${REMOVE}$
IPsec ポリシーとセキュリティ の関連付けを管理するために使用される列挙型構造体
ipsectypes.h
ipsectypes.idl
IPsec ポリシーとセキュリティ アソシエーションの管理に使用される関数
fwpmu.h
fwpmk.h
Management API (FWPM)${REMOVE}$
フィルター エンジンの管理使用される列挙型と構造体。
fwpmtypes.h
fwpmtypes.idl
フィルター エンジンの管理に使用される関数。 これらの関数は、次のタスクを実行するために使用されます。
  • フィルター、プロバイダー、吹き出しを設定およびクエリします。
  • IPsec 統計を取得します。
  • Windows フィルタリング プラットフォームを構成します。
fwpmu.h
fwpmk.h
共有 API (FWP) Windows フィルタリング プラットフォーム全体で共有される基本的な 列挙型構造体
fwptypes.h
fwptypes.idl

データ型名はすべて大文字とアンダースコアで区切られます。 名前は常に、 FWPM_PROVIDER0などのコンポーネント グループを識別するプレフィックスで始まります。

関数名は、大文字と小文字が混在し、大文字と小文字が区切られます。 名前は常に、 FwpmProviderContextAdd0 などのコンポーネント グループを識別するプレフィックスで始まります。

ほとんどのデータ名と関数名は、バージョン番号で終わる。 fwpvi.h ヘッダー ファイルは、バージョンに依存しないデータと関数名を、特定のオペレーティング システムで使用するのに適したバージョンにマップします。 詳細については、「 WFP Version-Independent名」および「特定のバージョンの Windows を対象とする」を参照してください。

各コンポーネントは単独ではありません。 たとえば、IKE メイン モード (MM) ポリシーは IKEEXT コンポーネントで定義されますが、プロバイダー コンテキストに格納され、両方とも FWPM API コンポーネントにあるフィルターに関連付けられます。

パブリック ヘッダー ファイルのUser-ModeとKernel-Mode

ほとんどの WFP 関数は、ユーザー モードまたはカーネル モードから呼び出すことができます。 ただし、ユーザー モード関数は Win32 エラー コードを表す DWORD 値を返しますが、カーネル モード関数は NT 状態コードを表す NTSTATUS 値を返します。 その結果、関数名とセマンティクスはユーザー モードとカーネル モードで同じですが、関数シグネチャは同じではありません。 これには、関数プロトタイプに対して個別のユーザー モードとカーネル モード固有のヘッダーが必要です。 ユーザー モードのヘッダー ファイル名は "u" で終わり、カーネル モードのヘッダー ファイル名は "k" で終わります。

次の表は、WFP 関数を定義する Win32 ヘッダー ファイルの一覧です。

ヘッダー ファイル 説明
fwpmk.h FWPM、IPsec、IKEEXT コンポーネントのカーネル モード関数プロトタイプ。 DDK でのみ使用できます。
fwpmu.h FWPM、IPsec、IKEEXT コンポーネントのユーザー モード関数プロトタイプ。 Microsoft Windows ソフトウェア開発キット (SDK) でのみ使用できます。
fwpsk.h FWPS コンポーネントのカーネル モード関数プロトタイプと列挙型。 DDK でのみ使用できます。
fwpsu.h FWPS コンポーネントのユーザー モード関数プロトタイプと列挙型。 Windows SDK でのみ使用できます。メモ ユーザー モード FWPS 列挙型は、カーネル モードの FWPS 列挙型と同じです。 その結果、これらの型は DDK でのみ文書化されます。
メモ ユーザー モード FWPS 関数のプロトタイプは、リターン コードを除き、カーネル モードの FWPS 関数プロトタイプと同じです。 ユーザー モード FWPS 関数は DWORD を返しますが、カーネル モード FWPS 関数は NTSTATUS を返します。 その結果、これらの関数は DDK でのみ文書化されます。

すべてのユーザー モード関数は、fwpuclnt.dllからエクスポートされます。 すべてのカーネル モード関数は、fwpkclnt.sysからエクスポートされます。

管理 (FWPM) と吹き出し (FWPS) のデータ型

ほとんどの FWPM データ型は、アプリケーションやドライバーからのフィルターや吹き出しの追加などの管理タスクに使用され、FWPS に対応します。 FWPS データ型は、分類用のコールアウト ルーチンのコンテキストで、ネットワーク トラフィックの実際のフィルター処理中に使用されます。

たとえば、特定のフィルター エンジン レイヤーにフィルターを追加するには、プログラマは FWPM 型 (例: filter.layerKey = FWPM_LAYER_INBOUND_IPPACKET) を使用する必要があります。 コールアウトの呼び出し元のレイヤーをチェックするには、プログラマは対応する FWPS の種類 を使用する必要があります。 if (inFixedValues->layerId == FWPS_LAYER_INBOUND_IPPACKET)

FWPM データ型に対応する一部の FWPS では、元の FWPM データ型が拡張されています。 たとえば、多くのフィルター エンジン レイヤーでフィルター条件を追加するために、プログラマはフィルター エンジン レイヤーに関係なく を指定 filterCondition.fieldKey = FWPM_CONDITION_IP_PROTOCOL します。 フィルター条件の値を見つけるために、プログラマはレイヤー固有の FWPS の種類を次のように指定します inFixedValues->incomingValue[FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL]

FWPS データ型は、通常、FWPM に対応するデータ型よりも小さくなります。 たとえば、 FWPM フィルターレイヤー識別子GUID(16 バイト) ですが、 FWPS フィルターレイヤー識別子UINT16 (16 ビット) です。 FWPS データ型のサイズを小さくすると、整数比較がリアルタイム トラフィックの GUID 比較よりも優れていることから、システム パフォーマンスが向上します。 また、FWPS 型はすべてフィルターを管理するためにカーネルで使用され、FWPM 型は異なるレイヤーを管理するためにユーザー モードで格納されるため、カーネル メモリが効率的に使用されます。

WFP API オブジェクト モデル

WFP API オブジェクト管理