次の方法で共有


CreateIpForwardEntry2 関数

CreateIpForwardEntry2 関数は、ローカル コンピューターに新しい IP ルート エントリを作成します。

構文

NETIOAPI_API CreateIpForwardEntry2(
  _In_ const MIB_IPFORWARD_ROW2 *Row
);

パラメーター

  • Row [in]
    IP ルート エントリの MIB_IPFORWARD_ROW2 構造体エントリへのポインター。

戻り値

関数が成功した場合、CreateIpForwardEntry2 は STATUS_SUCCESS を返します。

関数が失敗した場合、CreateIpForwardEntry2 は次のいずれかのエラー コードを返します:

リターン コード 説明
STATUS_INVALID_PARAMETER

その関数に無効なパラメーターが渡された。 このエラーは、次のいずれかの状況が発生した場合に返されます:

  • Row パラメーターには NULL ポインターが渡されます。

  • Row パラメーターが指す MIB_IPFORWARD_ROW2 構造体の DestinationPrefix メンバーは指定されませんでした。

  • MIB_IPFORWARD_ROW2 構造体の NextHop メンバーが指定されませんでした。

  • MIB_IPFORWARD_ROW2 構造体の InterfaceLuid メンバーと InterfaceIndex メンバーの両方が指定されていませんでした。

  • MIB_IPFORWARD_ROW2 構造体の PreferredLifetime メンバーは ValidLifetime メンバーよりも大きくなります。

  • MIB_IPFORWARD_ROW2 構造体の SitePrefixLength メンバーが、DestinationPrefix メンバーで指定されたプレフィックスの長さを超えています。

このエラーは、Row パラメーターに NULL ポインターが渡された場合、Row12 パラメーターが指した MIB_IPFORWARD_ROW2 構造体の DestinationPrefix メンバー が指定されなかった場合、MIB_IPFORWARD_ROW2 構造体の NextHop メンバーが指定されなかった場合、または MIB_IPFORWARD_ROW2 構造体の InterfaceLuid メンバーと InterfaceIndex メンバーが両方とも指定されなかった場合に返されます。 このエラーは、MIB_IPFORWARD_ROW2構造体で指定された PreferredLifetime メンバーが ValidLifetime メンバーより大きい場合、または MIB_IPFORWARD_ROW2 構造体の SitePrefixLengthDestinationPrefix メンバーで指定されているプレフィックスの長さを超える場合にも返されます。

STATUS_NOT_FOUND

指定されたインターフェイスが見つかりませんでした。 このエラーは、Row パラメーターが指す MIB_IPNET_ROW2 構造体の InterfaceLuid メンバーまたは InterfaceIndex メンバーで指定されるネットワーク インターフェイスを関数が見つけられない場合に返されます。

STATUS_NOT_SUPPORTED

要求はサポートされていません。 このエラーは、指定されたインターフェースが経路をサポートしていない場合に返されます。 このエラーは、ローカル コンピューター上に IPv4 スタックがなく、Row パラメーターが指す MIB_IPFORWARD_ROW2 構造体の DestinationPrefix メンバーのアドレス ファミリで AF_INET が指定されていた場合、またはローカル コンピューター上に IPv6 スタックがなく、DestinationPrefix メンバーのアドレス ファミリに対して AF_INET6 が指定されている場合に返されます。

ERROR_OBJECT_ALREADY_EXISTS

オブジェクトが既に存在します。 このエラーは、Row パラメーターが指すMIB_IPFORWARD_ROW2構造体の DestinationPrefix メンバーが、MIB_IPFORWARD_ROW2構造体の InterfaceLuid または InterfaceIndex メンバーによって指定されたインターフェイス上の既存の IP ルート エントリの複製である場合に返されます。

その他

FormatMessage 関数を使用して、返されたエラーのメッセージ文字列を取得します。

解説

CreateIpForwardEntry2 関数は、ローカル コンピューターに新しい近隣 IP アドレス エントリを追加するために使用されます。 InitializeIpForwardEntry 関数を使用して、MIB_IPFORWARD_ROW2構造体エントリのメンバーを既定値で初期化します。 その後、ドライバーは、変更するMIB_IPFORWARD_ROW2 エントリのメンバーを変更し、CreateIpForwardEntry2 を呼び出すことができます。

ドライバーは、Row パラメーターが指す MIB_IPFORWARD_ROW2 構造体の次のメンバーを初期化する必要があります。

  • DestinationPrefix を有効な IPv4 または IPv6 アドレス プレフィックスに設定します。

  • NextHop を有効な IPv4 または IPv6 アドレスとファミリに設定します。

  • InterfaceLuid または InterfaceIndex をインターフェイスの LUID またはインデックス値に設定します。

InterfaceLuid メンバーと InterfaceIndex メンバーは、前述の順序で使用されます。 したがって、 InterfaceLuid が指定されている場合、このメンバーは IP ルート エントリを追加するインターフェイスを決定するために使用されます。 InterfaceLuid メンバーに値が設定されていない (このメンバーの値がゼロに設定されている) 場合は、InterfaceIndex メンバーが次にインターフェイスを決定するために使用されます。

Row パラメーターが指す MIB_IPFORWARD_ROW2 構造体の Metric メンバーで指定されたルート メトリック オフセットは、完全なルート メトリックの一部のみを表します。 完全なメトリックは、関連付けられたインターフェイスの MIB_IPINTERFACE_ROW 構造体の Metric メンバーで指定されているインターフェイス メトリックに追加された、このルート メトリック オフセットの組み合わせです。 ドライバーは、GetIpInterfaceEntry 関数を呼び出すことで、インターフェイス メトリックを取得できます。

CreateIpForwardEntry2 関数が呼び出されると、Row パラメーターが指す MIB_IPFORWARD_ROW2 構造体の Age および Origin メンバーは無視されます。 これらのメンバーはネットワーク スタックによって設定され、 CreateIpForwardEntry2 関数を使用して設定することはできません。

Row パラメーターが指すMIB_IPFORWARD_ROW2構造体の DestinationPrefix メンバーと NextHop メンバーが、InterfaceIndex または InterfaceLuid メンバーで指定されているインターフェイス上の既存の IP ルート エントリの複製である場合、CreateIpForwardEntry2 関数は失敗します。

要件

対象プラットフォーム

ユニバーサル

バージョン

Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。

ヘッダー

Netioapi.h (Netioapi.h を含む)

ライブラリ

Netio.lib

IRQL

< DISPATCH_LEVEL

関連項目

DeleteIpForwardEntry2

GetBestRoute2

GetIpForwardEntry2

GetIpForwardTable2

GetIpInterfaceEntry

InitializeIpForwardEntry

MIB_IPFORWARD_ROW2

MIB_IPFORWARD_TABLE2

MIB_IPINTERFACE_ROW

NotifyRouteChange2

SetIpForwardEntry2