Win32_NetworkAdapterConfiguration::EnableDHCP 的奇怪行为?

问题描述 投票:0回答:2

我的应用程序能够关闭网络适配器或启用它们进行 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.

c windows networking wmi
2个回答
1
投票

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


0
投票

聚会有点晚了,但我也遇到了类似的问题,只是使用 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
© www.soinside.com 2019 - 2024. All rights reserved.