C++ 为什么删除适配器时DeleteIPAddress失败';什么是默认IP?

C++ 为什么删除适配器时DeleteIPAddress失败';什么是默认IP?,c++,ip,ip-address,windows-xp-embedded,iphelper,C++,Ip,Ip Address,Windows Xp Embedded,Iphelper,我正在尝试编写一个程序来切换所选适配器的IP on命令 为此,我使用getAdapterInfo()函数获取适配器的索引及其IP上下文,然后使用该函数删除当前IP(通过DeleteIPAddress(context)) 之后,将通过AddIPAddress()插入新IP 问题是,当尝试删除“默认”IP(AddIPAddress()未设置的IP)时,调用DeleteIPAddress函数失败,并且在删除旧IP之前调用AddIPAddress只会使适配器同时拥有两个不同的IP DeleteIPAdd

我正在尝试编写一个程序来切换所选适配器的IP on命令

为此,我使用getAdapterInfo()函数获取适配器的索引及其IP上下文,然后使用该函数删除当前IP(通过DeleteIPAddress(context))

之后,将通过AddIPAddress()插入新IP

问题是,当尝试删除“默认”IP(AddIPAddress()未设置的IP)时,调用DeleteIPAddress函数失败,并且在删除旧IP之前调用AddIPAddress只会使适配器同时拥有两个不同的IP

DeleteIPAddress功能失败,出现错误31(连接到系统的设备不工作)


是否有其他方法可以成功更改适配器上的IP地址?DeleteIPAddress在不从AddIPAddress获取上下文的情况下是否实际可用?

他们说,DeleteIPAddress删除AddIPAddress之前添加的地址:-) 我做了一些研究的兴趣和

有未记录的
SetAdapterIPAddress
功能

DWORD SetAdapterIpAddress( char *pszAdapGUID,
                       DWORD dwDHCP,
                       DWORD dwIP,
                       DWORD dwMask,
                       DWORD dwGateway );
它可能有效,也可能无效:-) 还有WMI接口。有关Win32网络适配器配置的信息,请参见。 windows注册表中有NIC IP地址的记录

我认为,复杂性存在于Windows中许多“内部”配置代理(DHCP,其他..),它们都是操作系统的内部部分,当它们操作ip地址时,其他失控的操作可能会中断它们的工作。也有可能在注册表中分配一个静态ip地址,它也不应该被破坏。然后你真的有了你之前添加的DeleteIPAddress。。。我认为,它是为您自己的动态配置代理设计的

若您对其他代理的工作不满意,您应该关闭它们(而不是操纵ip地址失控)。。。或者通过特定的API控制它们。。。或设置静态IP