我的应用程序能够关闭网络适配器或启用它们进行 DHCP 或静态配置。 IP 配置是通过 WMI Win32_NetworkApapterConfiguration 类完成的,并且由于某些原因禁用/启用适配器是通过 SetupApi 完成的。从启用适配器的那一刻开始,我注意到以下内容(Windows 7 SP1,32 位):
EnableDHCP 方法返回错误 84(IP 未启用)。所以我想我需要等待“IpEnabled”属性变为 true 并每秒轮询它 - 但它总是返回 false (顺便说一句:我使用 WMIC 监视该值,可以看到它实际上已变为 true)。
下一步 - 为了避免无限循环 - 我更改了“poll 'IpEnabled == true'循环”以在 10 次试验后跳出,并执行剩余的操作。看到:EnableDHCP 成功(ret == 0),并且 IpEnabled 突然变为 true。
编辑
情况一:
int ret;
// ...
// Returns error 84
ret = wmiExecMethod(clsName, "EnableDHCP", true, objPath);
// ...
情况2:
int ret;
// ...
// Will never get out of this
while (!wmiGetBool(pWMIObj, "IPEnabled"))
{
printf("Interface.IpEnabled=False\n");
Sleep(1000);
}
// ...
ret = wmiExecMethod(clsName, "EnableDHCP", true, objPath);
情况3:
int count = 10;
int ret;
// ...
// Will occur until count becomes 0
while (wmiGetBool(pWMIObj, "IPEnabled") && count--)
{
printf("Interface.IpEnabled=False - remaining trials: %d\n", count);
Sleep(1000);
}
// ...
// After this "delay", EnableDHCP returns 0 (SUCCESS)
ret = wmiExecMethod(clsName, "EnableDHCP", true, objPath);
// wmiGetBool(pWMIObj, "IPEnabled") now returns true too...
您知道这里出了什么问题吗?之前感谢您的帮助。
最诚挚的问候 威利·K.
这背后的“真正”问题是,如果接口未连接到网络(离线),Win32_NetworkApapterConfiguration::EnableDHCP 方法将失败。我发现配置 DHCP 接口的唯一方法是修改注册表......
聚会有点晚了,但我也遇到了类似的问题,只是使用 Go。 运行 powershell 命令似乎对我来说效果最好,每次都是第一次。
Set-NetIPInterface -InterfaceAlias "VirtualBox Host-Only Network" -Dhcp Enabled
但是,InterfaceIndex 似乎与 Win32_NetworkAdapterConfiguration 类返回的 Index 不同。我想我应该尝试检查 InterfaceIndex,但没有:D
可以运行这个powershell命令来检查
Get-NetAdapter | Select-Object InterfaceIndex, Status, InterfaceAlias