Подключение к точке Wifi с помощью WlanConnect

Тема в разделе "WASM.WIN32", создана пользователем Spectrum, 25 ноя 2008.

  1. Spectrum

    Spectrum Member

    Публикаций:
    0
    Регистрация:
    8 дек 2005
    Сообщения:
    43
    Адрес:
    Одесса
    Пытаюсь подключится к уже обнаруженной сети (точке) через WlanConnect.

    Из справки следует, что для Windows XP SP2 c установленным Wireless LAN API можно подключится только к сети, внесенной в предпочитаемые сети (preferred network list). Сделать это можно, вызвав WlanSetProfile.

    Из справки:

    DWORD WINAPI WlanSetProfile(
    HANDLE hClientHandle,
    const GUID* pInterfaceGuid,
    DWORD dwFlags,
    LPCWSTR strProfileXml,
    LPCWSTR strAllUserProfileSecurity,
    BOOL bOverwrite,
    PVOID pReserved,
    DWORD* pdwReasonCode
    );


    Все параметры здесь понятны кроме:

    LPCWSTR strProfileXml - содержит XML-представление профиля (Contains the XML representation of the profile).

    ВОПРОС:
    В каком виде нужно передавать XML-текст? В виде строки текста в памяти или нужно хитрым образом загружать XML-файл?
    Какой-нибудь простейший исходник в полном виде очень бы пригодился (поисковики не помогли)


    Пока выполнение WlanSetProfile выдает такую ошибку:
    ERROR_BAD_PROFILE
    1206 The network connection profile is corrupted.
    Пробовал загружать в strProfileXml текст XML в памяти.

    pdwReasonCode при этом выдает ошибку WLAN_REASON_CODE_INVALID_PROFILE_SCHEMA.

    Сразу добавлю: оборудование работает нормально; функции WlanOpenHandle, WlanEnumInterfaces, WlanGetAvailableNetworkList дают результаты; операционка Windows XP SP2 Wireless LAN API (почти то же, что и SP3 для беспроводных сетей).
     
  2. Spectrum

    Spectrum Member

    Публикаций:
    0
    Регистрация:
    8 дек 2005
    Сообщения:
    43
    Адрес:
    Одесса
    Замечательно...

    Главное правильно поставить вопрос. А там и сам разберешься. Что я и сделал.
    Такое ощущение, что подобную тему в интернете обсуждал только я и еще максимум десяток людей из англоязычных стран.

    Трудолюбиво отвечу сам на свой вопрос. Вдруг когда-то мне понадобится, а то и кому-то пригодится.

    Для правильной работы функции WlanSetProfile параметр strProfileXml должен адресоваться к строке с текстом формата XML.
    Для WinXP SP2 подходит такая:

    Код (Text):
    1. <?xml version="1.0"?>
    2. <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    3. <name>DOT</name>
    4. <SSIDConfig>
    5. <SSID>
    6. <name>DOT</name>
    7. </SSID>
    8. </SSIDConfig>
    9. <connectionType>ESS</connectionType>
    10. <MSM>
    11. <security>
    12. <authEncryption>
    13. <authentication>open</authentication>
    14. <encryption>none</encryption>
    15. <useOneX>false</useOneX>
    16. </authEncryption>
    17. </security>
    18. </MSM>
    19. </WLANProfile>
    Примечание: <SSID><name>DOT</name></SSID>. DOT имя профиля (он же SSID точки), которое вносится в предпочтительные сети.

    Таким образом ошибка ERROR_BAD_PROFILE более не появляется.
    В меню "беспроводные сети" появится сеть "DOT" с автоматическим подключением. И скорее всего операционка подключит к ней Wifi-устройство автоматом.
    Если нет, то это сделает функция WlanConnect:

    //

    Код (Text):
    1. WLAN_CONNECTION_PARAMETERS ConnectP1;
    2.  
    3. ConnectP1.wlanConnectionMode = wlan_connection_mode_profile;
    4. ConnectP1.strProfile=L"DOT";
    5. ConnectP1.pDot11Ssid=0;
    6. ConnectP1.pDesiredBssidList=0;
    7. ConnectP1.dot11BssType = dot11BssType; // взять с подключаемой точки
    8. ConnectP1.dwFlags=0;
    9.  
    10. WlanConnect (hClientHandle,&pInterfaceGuid,   &ConnectP1,    0);
    (Пока для ассемблера библиотеки Wifi мной не найдены, поэтому все это воспроизводилось на Си). Но тема все-таки больше подходит для Win32, чем для Си.