2014-02-17 34 views
0

我正試圖編寫一個程序,它將根據命令切換選定的適配器的IP。爲此,我使用GetAdaptersInfo()函數獲取適配器的索引及其IP上下文,然後使用它刪除當前IP(通過DeleteIPAddress(上下文))。刪除適配器的默認IP時,爲什麼DeleteIPAddress失敗?

之後,新IP將通過AddIPAddress()插入。

問題是,當試圖刪除「默認」IP(未由AddIPAddress()設置的IP)並在刪除舊IP之前調用AddIPAddress時,對DeleteIPAddress函數的調用失敗,只是將適配器與兩個不同的同時IP地址。

DeleteIPAddress函數失敗,錯誤31(附加到系統的設備無法運行)。

是否有另一種方法可以成功更改適配器上的IP地址? DeleteIPAddress在沒有從AddIPAddress獲取上下文的情況下實際上可用嗎?

回答

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 ...

相關問題