Управление Wi-Fi на XP (SP2 / SP3) - PullRequest
0 голосов
/ 28 августа 2008

Поддержка Wi-Fi в Vista - это нормально, но Собственный Wi-Fi в XP наполовину испечен. Драйверы минипортов беспроводной локальной сети NDIS 802.11 помогают вам в этом (например, сканирование по сети). Из того, что я прочитал (и попробовал), драйверы 802.11 NDIS для XP будут , а не , что позволит вам настроить беспроводное соединение. Вы должны использовать Native Wifi API для этого. (Пожалуйста, исправьте меня, если я ошибаюсь.) Такие приложения, как InSSIDer , помогли мне понять API, но InSSIDer - всего лишь сканер и не предназначен для настройки сетей Wifi.

Итак, вопрос в том, где я могу найти примеры кода (C # или C ++), которые имеют дело с настройкой сетей Wifi в XP - например, создание профиля и управление подключением?

Следует отметить, что это приложение XP Embedded в закрытой системе, где мы не можем использовать встроенную настройку Wireless Zero Configuration (WZC). Мы должны встроить все функции управления Wifi в наше приложение .NET.

Да, я погуглил себя синим. Кажется, у кого-то должно быть решение этой проблемы, но я не могу его найти. Вот почему я спрашиваю здесь.

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 августа 2008

Спасибо за отзыв, Ник. Я в значительной степени получил работу профиля и управления соединением. Хитрость в том, чтобы выяснить, какие части Native Wifi API не поддерживаются в XP. К счастью, Управляемый Wi-Fi API имеет события уведомлений о подключении / отключении, которые работают в XP ( NetworkChange также дает аналогичные события изменений).

1 голос
/ 28 августа 2008

Мы используем WZC на XP и Native WiFi на Vista, но вот код, который мы используем на Vista, FWIW.

Создание профиля:

// open a handle to the service
if ((dwError = WlanOpenHandle(
        WLAN_API_VERSION,
        NULL,               // reserved
        &dwServiceVersion,
        &hClient
        )) != ERROR_SUCCESS)
{
hClient = NULL;
}
return dwError;
dwError=WlanSetProfile(hClient, &guid, 0, profile, NULL, TRUE, NULL, &reason_code);

Установите соединение:

    WLAN_CONNECTION_PARAMETERS conn;

    conn.wlanConnectionMode=wlan_connection_mode_profile;
    conn.strProfile=name;
    conn.pDot11Ssid=NULL;
    conn.pDesiredBssidList=NULL;
    conn.dot11BssType=dot11_BSS_type_independent;
    conn.dwFlags=NULL;

    dwError = WlanConnect(hClient, &guid, &conn, NULL);

Проверка соединения:

    BOOL ret=FALSE;
    DWORD dwError;
    DWORD size;
    void *p=NULL;
    WLAN_INTERFACE_STATE *ps;

    dwError = WlanQueryInterface(hClient, &guid, wlan_intf_opcode_interface_state, NULL, &size, &p, NULL);
    ps=(WLAN_INTERFACE_STATE *)p;
    if(dwError!=0) 
        ret=FALSE;
    else
        if(*ps==wlan_interface_state_connected) 
            ret=TRUE;
    if(p!=NULL) WlanFreeMemory(p);
    return ret;

Чтобы поддерживать соединение с сетью, просто создайте поток, затем продолжайте проверять соединение, а затем повторно подключайтесь, если это необходимо.

РЕДАКТИРОВАТЬ: Человек этот материал разметки хромой. Мне нужно 3 правки, чтобы правильно понять фаркинг.

...