SetIpInterfaceEntry 関数

SetIpInterfaceEntry 関数は、ローカル コンピューター上の IP インターフェイスのプロパティを設定します。

構文

NETIOAPI_API SetIpInterfaceEntry(
  _Inout_ PMIB_IPINTERFACE_ROW Row
);

パラメーター

  • Row [in, out]
    インターフェイスの MIB_IPINTERFACE_ROW 構造体エントリへのポインター。 入力時に、ドライバーは MIB_IPINTERFACE_ROW のFamily メンバーを AF_INET6 または AF_INET に設定する必要があり、ドライバーは、MIB_IPINTERFACE_ROW の InterfaceLuid メンバーまたは InterfaceIndex メンバーを指定する必要があります。 正常に返されると、MIB_IPINTERFACE_ROW エントリの InterfaceIndex メンバーが指定された場合、MIB_IPINTERFACE_ROW の InterfaceLuid メンバーが入力されます。

戻り値

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

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

リターン コード 説明
STATUS_INVALID_PARAMETER

その関数に無効なパラメーターが渡された。 このエラーは、Row パラメーターに NULL ポインターが渡された場合、Row パラメーターが指すMIB_IPINTERFACE_ROW 構造体の Family メンバーが AF_INET または AF_INET6 として指定されていない場合、または MIB_IPINTERFACE_ROW 構造体の InterfaceLuid メンバーと InterfaceIndex メンバーが指定されていない場合に返されます。

STATUS_NOT_FOUND

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

その他

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

解説

ドライバーは、InitializeIpInterfaceEntry 関数を使用して、既定値で MIB_IPINTERFACE_ROW 構造体エントリのフィールドを初期化する必要があります。 ドライバーは、修正したい MIB_IPINTERFACE_ROW エントリのフィールドを変更し、それから SetIpInterfaceEntry 関数を呼び出すことができます。

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

  • ファミリ
    AF_INET または AF_INET6 に設定します。

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

出力時に、Row パラメーターが指す MIB_IPINTERFACE_ROW 構造体の InterfaceLuid メンバーは、InterfaceIndex が指定された場合に入力されます。

SetIpInterfaceEntry は、Rowパラメーターが指す MIB_IPINTERFACE_ROW 構造体の MaxReassemblySizeMinRouterAdvertisementIntervalMaxRouterAdvertisementIntervalConnectedSupportsWakeUpPatternsSupportsNeighborDiscoverySupportsRouterDiscoveryReachableTimeTransmitOffloadReceiveOffload メンバーを無視します。 これらのメンバーはネットワーク スタックによって設定され、SetIpInterfaceEntry 関数を使用して変更することはできません。

セキュリティ要件が異なる複数のネットワークに特権なしで同時にアクセスすると、セキュリティ ホールが作成され、特権のないドライバーが 2 つのネットワーク間で誤ってデータを中継できるようになります。 一般的な例として、仮想プライベート ネットワーク (VPN) とインターネットへの同時アクセスがあります。 Windows Server 2003 および Windows XP オペレーティング システムでは、弱いホスト モデルが使用されており、リモート アクセス サービス (RAS) が他のインターフェイス上のすべての既定のルートのルート メトリックを増やすことで、このような同時アクセスが防止されます。 そのため、すべてのトラフィックが VPN インターフェイス経由でルーティングされ、他のネットワーク接続が中断されます。

Windows Vista 以降のバージョンの Windows オペレーティング システムでは、既定では強力なホスト モデルが使用されます。 GetBestRoute2 関数を使用して、ルート検索で送信元 IP アドレスが指定された場合、ルート検索は送信元 IP アドレスのインターフェイスに制限されます。 潜在的なルートのリストには、インターネットへのトラフィックを可能にする VPN インターフェイスのルートさえも含まれていないため、RAS によるルート メトリックの変更は効果がありません。 ドライバーは、MIB_IPINTERFACE_ROW 構造体の DisableDefaultRoutes メンバーを使用して、インターフェイスの既定のルートの使用を無効にできます。 VPN クライアントは、VPN クライアントがスプリット トンネリングを必要としない場合に、スプリット トンネリングを制限するセキュリティ対策としてこのメンバーを使用できます。 VPN クライアントは、必要に応じて、SetIpInterfaceEntry 関数を呼び出して、DisableDefaultRoutes メンバーを TRUE に設定できます。 VPN クライアントは、GetIpInterfaceEntry 関数を呼び出すことで、DisableDefaultRoutes メンバーの現在の状態をクエリできます。

要件

対象プラットフォーム

ユニバーサル

バージョン

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

ヘッダー

Netioapi.h (Netioapi.h を含む)

ライブラリ

Netio.lib

IRQL

< DISPATCH_LEVEL

関連項目

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange