Я пытаюсь подключиться к сети Wi-Fi с помощью bssid в ситуации, когда есть несколько точек доступа (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);
Проблема в том, что код правильно работает на 3 машинах с win7, но в win8 он возвращает 50 (ERROR_NOT_SUPPPORTED). Разница лишь в том, что win 8 установлен в vm. но одна из win7 также установлена в vm.
но если бы я использовал
list.uNumOfEntries = 0;
тогда он соединяется, но не с тем, кого я желаю.
Одна вещь, которую я заметил, когда я увидел экспортированную функцию dll wlanapi.dll для win7 и win 8, используя DLL Export Viewer
Количество функций в win7 меньше, чем в win8.
в win7 есть только
WlanConnect
но в win8 тоже есть
WlanConnect
WlanConnectEx
WlanConnectWithInput
но в заголовочном файле wlanapi.h (я использую Visual Studio Express 13) WlanConnectEx и WlanConnectWithInput не существует. Я проверяю MSDN, и только некоторые новые функции присутствуют.
В итоге
я) Это потому, что ОС работает в VM? (но один из Win7 также работает в VM)
ii) Что-то отсутствует в коде, например, какое должно быть значение в заголовке или списке?
iii) Возможно ли, что соединение с bssid было перенесено в эти новые функции?
iv) Если это так, где я могу получить правильный заголовочный файл для этих новых функций?
v) Это будет в последней версии Win SDK? (Это я проверю после того, как я отправлю это)
Vi) Можно ли будет узнать, какие параметры требуются для этих новых функций, без заголовочного файла (возможно, не возможно, но на всякий случай).
РЕДАКТИРОВАТЬ: обнаружил, что это не проблема API, а проблема водителя. В Wi-Fi не было драйвера Win8, а только драйвер win7. Поменял адаптер на тот, на котором был драйвер win8 и он теперь работает. Хотя немного странно, что функционал, работающий в старых ОС, не будет работать в новой системе (без обратной совместимости?). Или, может быть, он загрузил драйвер xp как общий. И xp не поддерживает список BSSID. К сожалению, я проверил оригинальный адаптер чипсета и его Atheros. (Адаптер изготовлен другим производителем, но чипсет Atheros, а требуемый драйвер для AR9170). И им еще предстоит выпустить драйвер win8. Я пытался найти один, но пока не смог найти.
Но вопросы для заголовочного файла для новой функции все еще применимы.
Задача ещё не решена.