Win32_NetworkAdapterConfiguration :: EnableDHCP的奇怪行为?

时间:2018-03-27 16:27:14

标签: c windows networking wmi

我的应用程序可以为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。

1 个答案:

答案 0 :(得分:0)

这背后的“真正”问题是,如果接口未连接到网络(离线),Win32_NetworkApapterConfiguration :: EnableDHCP方法将失败。我发现配置DHCP接口的唯一方法是修改注册表....