You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Windows WiFi API WlanEnumInterfaces返回ERROR_INVALID_STATE错误的原因咨询

调用Windows WiFi API WlanEnumInterfaces返回ERROR_INVALID_STATE错误的原因咨询

嘿,我一眼就发现你代码里的问题啦!这个ERROR_INVALID_STATE错误的根源在于你用错了API句柄的创建函数。

你现在用的是WFDOpenHandle来获取客户端句柄,但WFD(Windows Direct)是用于点对点无线连接的API,和咱们用来枚举WiFi网络的WLAN API完全不是一套体系。WlanEnumInterfaces只认通过WlanOpenHandle创建的合法WLAN客户端句柄,你给它一个WFD的句柄,它自然会返回状态无效的错误。

给你修正后的代码示例,把句柄创建部分换成正确的WLAN API调用:

#include <wlanapi.h>
#pragma comment(lib, "wlanapi.lib")

// ...

PWLAN_INTERFACE_INFO_LIST  pIfList = NULL;
DWORD dwNegotiatedVersion;
HANDLE hClientHandle;

// 用WlanOpenHandle替代WFDOpenHandle
DWORD Res = WlanOpenHandle(WLAN_API_VERSION_2_0, NULL, &dwNegotiatedVersion, &hClientHandle);
if (Res != ERROR_SUCCESS)
{
    // 注意:如果WlanOpenHandle失败,hClientHandle可能是无效的,不要调用WlanCloseHandle
    return;
}

Res = WlanEnumInterfaces(hClientHandle, NULL, &pIfList);
if (Res == ERROR_INVALID_STATE)
{
    WlanCloseHandle(hClientHandle, NULL);
    return;
}
else if (Res != ERROR_SUCCESS)
{
    WlanCloseHandle(hClientHandle, NULL);
    return;
}

// 这里可以处理枚举到的接口列表...

// 别忘了释放资源
if (pIfList != NULL)
{
    WlanFreeMemory(pIfList);
}
WlanCloseHandle(hClientHandle, NULL);

另外还要注意几个小细节:

  • 编译时要链接wlanapi.lib库,上面的代码里用#pragma comment(lib, "wlanapi.lib")帮你自动链接了
  • 如果枚举失败,记得及时释放已分配的资源,避免内存泄漏
  • 部分Windows环境下,可能需要管理员权限才能正常调用WLAN枚举API,你可以试试以管理员身份运行你的程序

备注:内容来源于stack exchange,提问作者Arun K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:34:31