1

我正在尝试使用 bssid 连接到 WiFi 网络,其中存在多个名称相同但 bssid 不同的 AP (SSID)。我正在使用的示例相关代码是

NDIS_OBJECT_HEADER header;
DOT11_BSSID_LIST list;
...
header.Revision = DOT11_BSSID_LIST_REVISION_1;
header.Type = 0x80;
header.Size = sizeof(header);
list.Header = header;
list.uNumOfEntries = 1;
list.uTotalNumOfEntries = 1;
list.BSSIDs[0][0] = 0xa4;
...
list.BSSIDs[0][5] = 0x00;
...
wlanConnPara.pDesiredBssidList = &list;
...
error = WlanConnect(hClient,&guidIntf,&wlanConnPara,NULL);

问题是代码在 3 台装有 win7 的机器上正常工作,但在 win8 中它返回 50 (ERROR_NOT_SUPPPORTED)。唯一的区别是win 8安装在一个vm中。但是其中一个win7也安装在vm中。

但如果我用

list.uNumOfEntries = 0;

然后它正在连接,但不是连接到我想要的 bssid。

当我使用 DLL Export Viewer 看到 win7 和 win 8 的 dll wlanapi.dll 的导出函数时,我注意到了一件事

win7的功能数量比win8少。

win7只有

WlanConnect

但是在win8中也有

WlanConnect
WlanConnectEx
WlanConnectWithInput

但在头文件 wlanapi.h(我使用 Visual Studio Express 13)中,WlanConnectEx 和 WlanConnectWithInput 不存在。我检查了 MSDN,只有一些新功能存在。

总之

i)这是因为操作系统在vm中运行吗?(但win7之一也在vm中运行)

ii) 代码中是否缺少任何内容,例如标题或列表中的值应该是什么?

iii) 与 bssid 的连接是否可能已移至这些新功能?

iv) 如果是这样,我在哪里可以获得这个新功能的正确头文件?

v) 它会在最新的 Win SDK 中吗?(这个我会在我发布后检查)

六)如果没有头文件,是否有可能知道这个新函数需要什么参数。(也许不可能,但以防万一)

编辑:发现这不是 API 的问题,而是驱动程序的问题。wifi没有win8驱动,只有win7驱动。将适配器更改为具有 win8 驱动程序并且现在可以正常工作的适配器。虽然有点奇怪,在旧操作系统中工作的功能在新系统中不起作用(没有向后兼容性?)。或者,它可能将 xp 驱动程序作为通用驱动程序加载。而且xp不支持BSSID列表。不幸的是,我检查了原始适配器芯片组及其 atheros 芯片组。(适配器由其他供应商制造,但芯片组是 atheros,所需的驱动程序适用于 AR9170)。他们还没有发布win8驱动程序。我试图找到一个,但到目前为止找不到。

但是新功能的头文件问题仍然适用。

4

0 回答 0