次の方法で共有


SetIpInterfaceEntry 関数 (netioapi.h)

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

構文

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API SetIpInterfaceEntry(
  [in, out] PMIB_IPINTERFACE_ROW Row
);

パラメーター

[in, out] Row

インターフェイスの MIB_IPINTERFACE_ROW 構造体エントリへのポインター。 入力時に、MIB_IPINTERFACE_ROWFamily メンバーを AF_INET6 または AF_INET に設定し、MIB_IPINTERFACE_ROWInterfaceLuid または InterfaceIndexメンバーを指定する必要があります。 正常に戻ると、MIB_IPINTERFACE_ROW エントリのInterfaceIndex メンバーが指定された場合、MIB_IPINTERFACE_ROWInterfaceLuid メンバーが入力されます。

戻り値

関数が成功した場合、戻り値はNO_ERROR。

関数が失敗した場合、戻り値は次のいずれかのエラー コードになります。

リターン コード 説明
ERROR_ACCESS_DENIED
アクセスが拒否されました。 このエラーは、次のようないくつかの条件で返されます。ユーザーがローカル コンピューターに必要な管理特権を持っていないか、アプリケーションが組み込みの管理者 (RunAs 管理者) として拡張シェルで実行されていません。
ERROR_FILE_NOT_FOUND
指定されたファイルが見つかりません。 Row パラメーターが指すMIB_IPINTERFACE_ROWInterfaceLuid メンバーまたは InterfaceIndex メンバーによって指定されたネットワーク インターフェイス LUID またはインターフェイス インデックスがローカル コンピューター上の値ではない場合、このエラーが返されます。
ERROR_INVALID_PARAMETER
無効なパラメーターが関数に渡されました。 Row パラメーターに NULL ポインターが渡された場合、Row パラメーターが指すMIB_IPINTERFACE_ROWFamily メンバーがAF_INETまたはAF_INET6として指定されていない場合、または Row パラメーターが指すMIB_IPINTERFACE_ROWInterfaceLuid メンバーまたは InterfaceIndex メンバーの両方が指定されていない場合、このエラーが返されます。
ERROR_NOT_FOUND
指定したインターフェイスが見つかりませんでした。 Row パラメーターが指すMIB_IPINTERFACE_ROWの InterfaceLuid メンバーまたは InterfaceIndex メンバーによって指定されたネットワーク インターフェイスが、MIB_IPINTERFACE_ROW構造体の Family メンバーで指定された IP アドレス ファミリと一致しない場合、このエラー返されます。
その他
FormatMessage を使用して、返されたエラーのメッセージ文字列を取得します。

注釈

SetIpInterfaceEntry 関数は、Windows Vista 以降で定義されています。

SetIpInterfaceEntry 関数を使用して、既存の IP インターフェイス エントリを変更できます。

入力時に、Row パラメーターが指すMIB_IPINTERFACE_ROW構造体の Family メンバーは、AF_INETまたはAF_INET6に初期化する必要があります。 入力に加えて、Row パラメーターを指す MIB_IPINTERFACE_ROW 構造体の少なくとも 1 つのメンバーを初期化する必要があります: InterfaceLuid または InterfaceIndex

フィールドは、上記の順序で使用されます。 したがって、 InterfaceLuid が指定されている場合は、このメンバーを使用してインターフェイスが決定されます。 InterfaceLuid メンバーに値が設定されていない場合 (このメンバーの値が 0 に設定されました)、InterfaceIndex メンバーが次に使用されてインターフェイスが決定されます。

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

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

通常、アプリケーションは GetIpInterfaceTable 関数を呼び出してローカル コンピューター上の IP インターフェイス エントリを取得するか、 GetIpInterfaceEntry 関数を呼び出して、変更する IP インターフェイス エントリのみを取得します。 特定の IP インターフェイス エントリのMIB_IPINTERFACE_ROW構造体を変更し、この構造体へのポインターを Row パラメーターの SetIpInterfaceEntry 関数に渡すことができます。 ただし、IPv4 の場合、アプリケーションは、MIB_IPINTERFACE_ROW構造体の SitePrefixLength メンバーを変更しようとしないでください。 IPv4 の場合、 SitePrefixLength メンバーは 0 に設定する必要があります。

既存の IP インターフェイス エントリを変更するもう 1 つの方法は、 InitializeIpInterfaceEntry 関数を使用して 、既定値 を使用してMIB_IPINTERFACE_ROW構造体エントリのフィールドを初期化することです。 次に、変更する IP インターフェイスと一致するように、Row パラメーターが指すMIB_IPINTERFACE_ROW構造体の Family メンバーと InterfaceIndex メンバーまたは InterfaceLuid メンバーを設定します。 アプリケーションは、変更する MIB_IPINTERFACE_ROW エントリのフィールドを変更し、 SetIpInterfaceEntry 関数を呼び出すことができます。 ただし、IPv4 の場合、アプリケーションは、MIB_IPINTERFACE_ROW構造体の SitePrefixLength メンバーを変更しようとしないでください。 IPv4 の場合、 SitePrefixLength メンバーは 0 に設定する必要があります。 変更されるすべてのフィールドを特定する唯一の方法は、特定の IP インターフェイス エントリのMIB_IPINTERFACE_ROW内のフィールドと、MIB_IPINTERFACE_ROWが既定値に初期化されたときに InitializeIpInterfaceEntry 関数によって設定されたフィールドとを比較するため、この方法では注意が必要です。

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

Windows Vista 以降では、強力なホスト モデルが既定で使用されます。 GetBestRoute2 または GetBestRoute を使用したルート参照でソース IP アドレスが指定されている場合、ルート参照はソース IP アドレスのインターフェイスに制限されます。 RAS によるルート メトリックの変更は、潜在的なルートの一覧に VPN インターフェイスのルートがないため、インターネットへのトラフィックも許可されないため、影響はありません。 MIB_IPINTERFACE_ROWDisableDefaultRoutes メンバーを使用すると、インターフェイスで既定のルートを使用して無効にすることができます。 このメンバーは、VPN クライアントによって分割トンネリングが必要ない場合に分割トンネリングを制限するために、VPN クライアントによるセキュリティ対策として使用できます。 VPN クライアントは SetIpInterfaceEntry 関数を呼び出して、必要に応じて DisableDefaultRoutes メンバーを TRUE に設定できます。 VPN クライアントは、GetIpInterfaceEntry 関数を呼び出すことによって、DisableDefaultRoutes メンバーの現在の状態を照会できます。

次に、

SetIpInterfaceEntry 関数は、Administrators グループのメンバーとしてログオンしているユーザーのみが呼び出すことができます。 Administrators グループのメンバーではないユーザーによって SetIpInterfaceEntry が呼び出された場合、関数呼び出しは失敗し、 ERROR_ACCESS_DENIED が返されます。 この関数は、Windows Vista 以降のユーザー アカウント制御 (UAC) が原因で失敗する場合もあります。 この関数を含むアプリケーションが、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしているユーザーによって実行された場合、 requestedExecutionLevel が requireAdministrator に設定されたマニフェスト ファイルでアプリケーションがマークされていない限り、この呼び出しは失敗します。 アプリケーションにこのマニフェスト ファイルがない場合、組み込みの Administrator 以外の Administrators グループのメンバーとしてログオンしているユーザーは、この関数を成功させるために、組み込みの Administrator (RunAs 管理者) として拡張シェルでアプリケーションを実行する必要があります。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー netioapi.h (Iphlpapi.h を含む)
Library Iphlpapi.lib
[DLL] Iphlpapi.dll

こちらもご覧ください

GetBestRoute

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

IP ヘルパー関数リファレンス

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange