Почему DeleteIPAddress завершается ошибкой при удалении IP-адреса адаптера по умолчанию?

Я пытаюсь написать программу, которая будет переключать IP-адрес выбранного адаптера по команде.

Для этого я использую функцию GetAdaptersInfo() для получения индекса адаптера и его контекста IP, а затем использую его для удаления текущего IP (через DeleteIPAddress(context)).

После этого новый IP-адрес будет вставлен через AddIPAddress().

Проблема заключается в том, что вызов функции DeleteIPAddress завершается неудачно при попытке удалить IP-адрес "по умолчанию" (тот, который не установлен AddIPAddress()), и вызов AddIPAddress перед удалением старого IP-адреса оставляет адаптеру два разных одновременных IP-адреса.

Функция DeleteIPAddress завершается с ошибкой 31 (подключенное к системе устройство не работает).

Есть ли другой способ успешно изменить IP-адрес на адаптере? Действительно ли DeleteIPAddress можно использовать без получения контекста от AddIPAddress?

1 ответ

Говорят, DeleteIPAddress удаляет адрес, ранее добавленный AddIPAddress:-) Я провел некоторые исследования по интересам и...

Есть недокументированные SetAdapterIPAddress функция.

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

Может работать или нет:-) Также есть интерфейс WMI. Смотрите для Win32_NetworkAdapterConfiguration учебный класс. И есть записи в реестре Windows для IP-адреса NIC...

Я думаю, сложность заключается в наличии в Windows многих "внутренних" конфигурационных агентов (DHCP, другие...), и все они являются внутренней частью ОС, а затем, когда они манипулируют IP-адресом, другие манипуляции вне элемента управления могут сломаться. работая из них. Также есть возможность назначить статический IP-адрес в Реестре, и он также не должен быть взломан. И тогда у вас действительно есть DeleteIPAddress, который вы ранее добавили... Я думаю, он предназначен для ваших собственных агентов динамической конфигурации...

Если вас не устраивает работа других агентов, вы должны отключить их (вместо того, чтобы манипулировать IP-адресом из-под контроля)... Или управлять им с помощью какого-то определенного API... Или установить статический IP...

Другие вопросы по тегам