删除适配器的默认IP时,为什么DeleteIPAddress失败?

时间:2014-02-17 21:37:26

标签: c++ ip ip-address windows-xp-embedded iphelper

我正在尝试编写一个程序,它将根据命令切换所选适配器的IP。

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

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

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

DeleteIPAddress函数失败,错误31(连接到系统的设备无法运行)。

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

1 个答案:

答案 0 :(得分:1)

他们说,DeleteIPAddress删除以前由AddIPAddress添加的地址:-) 我根据兴趣做了一些研究......

有无证件SetAdapterIPAddress功能。

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

它可能工作与否:-) 还有WMI接口。请参阅Win32_NetworkAdapterConfiguration课程。 Windows注册表中有一条记录用于NIC IP地址...

我认为,复杂性是在Windows中存在许多“内部”配置代理(DHCP,其他......)并且它们都是操作系统的内部部分,然后当它们操纵ip地址时,其他操作就出来了控制可能会破坏他们的工作。还有可能在注册表中分配静态IP地址,也不应该破坏它。然后你真的有你之前添加的DeleteIPAddress ...我想,它适用于你自己的动态配置代理......

如果你对其他代理的工作不满意,你应该关闭它们(而不是操纵控制下的ip地址)......或者通过某些特定的API来控制它们......或者设置静态IP ... < / p>