Wlanconnect在win8中没有使用bssid,但在win7中同样适用

时间:2014-04-26 13:28:29

标签: c++ winapi windows-8 windows-7 wlanapi

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

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);

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

但如果我用

list.uNumOfEntries = 0;

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

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

win7中的功能数量少于win8中的功能。

<7>在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会不会? (这是我发布后我会检查的)

Vi)是否可以在没有头文件的情况下知道这些新函数需要什么参数。(也许不可能,但以防万一)

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

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

0 个答案:

没有答案