Delphi和WMI网络技术

4
为了编写一个应用程序,我需要更改网络适配器的一些参数,包括启用/禁用DHCP。为此,我使用了这个源代码中的“SetIpConfig”命令:SetIPConfig。如果网络适配器已连接,它可以很好地工作并完成我需要的任务。问题是,如果LAN电缆未插入,我无法启用DHCP,而我可以正确地更改其他参数,如IP或网关。当我尝试在网络适配器断开连接时启用DHCP时,我会收到OLE错误:“94路径、文件或对象未找到”。我认为它应该能够正常工作,即使网络卡未连接,因为我可以正确地执行此操作,进入网络卡/IP属性窗口(使用XP)。这里描述了我的确切问题:

http://www.neowin.net/forum/topic/515984-c-enabling-dhcp-on-nic-through-wmi/

正如那个人所做的,我试图直接更改注册表键来激活DHCP,但即使在网络适配器属性上,值被正确更改,网卡仍然表现得好像没有改变过一样,就像这些更改没有被“应用”到它身上一样。
这里是另一个相关话题:

www.winvistatips.com/wmi-config-fails-ethernet-cable-unplugged-t181330.html

他们建议禁用dhcpsense,将一个名为DisableDHCPMediaSense(DWORD)的键放入HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters中,并将其设置为1。

好的...现在它可以工作了,我没有尝试完整的dhcp功能,只是看到它可以在网卡未插入时启用,但正如有人写的那样,我认为禁用dhcp sense不是一个好主意。 这意味着dhcp客户端无法知道连接状态,所以我认为如果连接断开然后重新建立,可能会在更新租约方面遇到麻烦。

操作系统:XP SP3 语言:DelphiXE

有什么问题吗? 非常感谢。


如果问题已解决,请不要忘记接受答案这样。这将为未来遇到相同问题的访问者确认正确答案。谢谢! - TLama
1个回答

5

看起来这是WMI的限制(或者是一个bug?)当设备未连接时(有段时间前我在其他论坛上也看到了类似的报告)。作为解决方法,只针对这种特殊情况(设备未连接时)你可以尝试使用未记录的DhcpNotifyConfigChange函数或直接使用Windows注册表。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Adapter-guid_goes_here} 

好的,它可以工作了! 首先,您需要更改适配器的注册表项, 然后调用DhcpNotifyConfigChange来“应用”所做的更改到注册表中。 好处是它似乎比使用WMI快得多, 坏处是它是一个未记录的函数。 最好让微软使WMI正常工作。 - Drugoi_mir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接