【问题标题】:Strange behaviour of Win32_NetworkAdapterConfiguration::EnableDHCP?Win32_NetworkAdapterConfiguration::EnableDHCP 的奇怪行为?
【发布时间】:2018-09-06 04:00:53
【问题描述】:

我的应用程序可以为 DHCP 或静态配置关闭或启用网络适配器。 IP 配置是通过 WMI Win32_NetworkAapterConfiguration 类完成的,出于某些原因,禁用/启用适配器是通过 SetupApi 完成的。从启用适配器开始,我注意到以下内容(Windows 7 SP1,32 位):

EnableDHCP 方法返回错误 84(未启用 IP)。所以我认为我需要等待该属性“IpEnabled”变为真并每秒轮询一次 - 但它总是返回假(顺便说一句:我使用 WMIC 监控了该值,并且可以看到它实际上已变为真)。

接下来——为了避免无限循环——我改变了我的“poll 'IpEnabled == true'循环”,在 10 次试验后跳出,然后做剩下的事情。并看到:EnableDHCP 成功(ret == 0),IpEnabled 也突然变为 true。

编辑

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

您知道这里出了什么问题吗?感谢之前的帮助。

最好的问候 威利 K。

【问题讨论】:

  • 我的水晶球说您忘记在循环内重新运行查询。强迫我们猜测何时可以简单地将代码复制/粘贴到问题中并没有多大意义。
  • 一些更正:即使在“EnableDHCP”成功后,“IpEnabled”仍然是错误的,但是,我目前的解决方法是调用 EnableDHCP,直到它成功进行有限次数的重试。如果有人有更好的想法,我会很高兴听到。

标签: c windows networking wmi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-07-20
    • 2010-10-03
    • 2021-07-12
    相关资源
    最近更新 更多