【问题标题】:Why does DeleteIPAddress fails when deleting the adapter's default IP?为什么删除适配器的默认 IP 时 DeleteIPAddress 失败?
【发布时间】:2014-03-17 09:05:58
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    有未记录的SetAdapterIPAddress函数。

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

    它可能有效或无效:-) 还有WMI接口。请参阅Win32_NetworkAdapterConfiguration 类。 而且windows注册表里有网卡IP地址的记录...

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

    如果您对其他代理的工作不满意,您应该将其关闭(而不是控制 IP 地址)...或通过某些特定 API 控制它们...或设置静态 IP...

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多