提问人:ememorais 提问时间:2/18/2014 更新时间:2/18/2014 访问量:378
为什么删除适配器的默认 IP 时 DeleteIPAddress 会失败?
Why does DeleteIPAddress fails when deleting the adapter's default IP?
问:
我正在尝试编写一个程序,该程序将根据命令切换所选适配器的 IP。
为此,我使用 GetAdaptersInfo() 函数获取适配器的索引及其 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接口。见类。
并且 Windows 注册表中有 NIC IP 地址的记录......Win32_NetworkAdapterConfiguration
我认为,复杂性在于 Windows 中存在许多“内部”配置代理(DHCP 等..),它们都是操作系统的内部部分,然后当它们操纵 IP 地址时,其他不受控制的操作可能会破坏它们的工作。此外,还可以在注册表中分配一个静态 IP 地址,并且该地址也不应被破坏。然后你真的有你之前添加的 DeleteIPAddress......我认为,它是为您自己的动态配置代理准备的......
如果您对其他代理的工作不满意,您应该关闭它们(而不是在控制之外操纵 IP 地址)......或者通过一些特定的 API 来控制它们......或设置静态IP...
评论