0

選択したアダプターの IP をコマンドで切り替えるプログラムを作成しようとしています。

そのために、GetAdaptersInfo() 関数を使用してアダプターのインデックスとその IP コンテキストを取得し、それを使用して現在の IP を削除しています (DeleteIPAddress(context) を使用)。

その後、AddIPAddress() によって新しい IP が挿入されます。

問題は、「デフォルト」の IP (AddIPAddress() によって設定されていない IP) を削除しようとすると、DeleteIPAddress 関数の呼び出しが失敗し、古い IP を削除する前に AddIPAddress を呼び出すと、アダプターに 2 つの異なる同時 IP が残ることです。

DeleteIPAddress 関数がエラー 31 (システムに接続されたデバイスが機能していません) で失敗します。

アダプターの IP アドレスを正常に変更する別の方法はありますか? AddIPAddress からコンテキストを取得せずに DeleteIPAddress を実際に使用できますか?

4

1 に答える 1

1

彼らは言う、DeleteIPAddress は以前に AddIPAddress によって追加されたアドレスを削除します :-) 私は興味を持っていくつかの調査を行いました...

文書化されていないSetAdapterIPAddress機能があります。

DWORD SetAdapterIpAddress( char *pszAdapGUID,
                       DWORD dwDHCP,
                       DWORD dwIP,
                       DWORD dwMask,
                       DWORD dwGateway );

動作するかどうかはわかりません :-) また、WMI インターフェイスもあります。Win32_NetworkAdapterConfigurationクラスを参照してください。そして、NIC IPアドレスのWindowsレジストリにレコードがあります...

複雑さは、Windowsに多くの「内部」構成エージェント(DHCPなど)が存在することであり、それらはすべてOSの内部部分であり、IPアドレスを操作すると、制御不能な他の操作が壊れる可能性があると思いますそれらの働き。また、レジストリに静的 IP アドレスを割り当てる可能性もあり、これも壊れてはなりません。そして、以前に追加した DeleteIPAddress が本当にあります...これは、独自の動的構成エージェントを対象としていると思います...

他のエージェントの作業に満足できない場合は、(制御不能な IP アドレスを操作するのではなく) それらをオフにする必要があります... または、特定の API でそれらを制御します... または静的 IP を設定します...

于 2014-02-18T01:04:34.577 に答える