Почему DeleteIPAddress не удается при удалении IP-адреса адаптера по умолчанию?

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

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

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

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

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

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

0

Решение

Говорят, 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 …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]