我的应用程序可以为DHCP或静态配置转换网络适配器或启用它们。 IP配置通过WMI Win32_NetworkApapterConfiguration类完成,禁用/启用适配器由于某些原因通过SetupApi完成。从启用适配器的点开始,我注意到了以下内容(Windows 7 SP1,32位):
EnableDHCP方法返回错误84(未启用IP)。所以我想我需要等待那个属性" IpEnabled"变为真实并且每秒都会轮询它 - 但它总是返回错误(顺便说一句:我使用WMIC监视该值并且可以看到它实际上变为真实)。
接下来 - 为了避免和无限循环 - 我改变了我的"民意调查' IpEnabled == true'环路"在10次试验后跳出来,做其余的事情。并且看到:EnableDHCP成功(ret == 0),并且IpEnabled突然变为真。
修改
情况1:
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...
你有什么想法吗?在此之前感谢您的帮助。
祝你好运 Willi K。
答案 0 :(得分:0)
这背后的“真正”问题是,如果接口未连接到网络(离线),Win32_NetworkApapterConfiguration :: EnableDHCP方法将失败。我发现配置DHCP接口的唯一方法是修改注册表....