XP(SP2 / SP3)上的Wifi管理

时间:2020-03-05 18:44:14  来源:igfitidea点击:

Vista上的Wifi支持很好,但是XP上的Native Wifi刚好成熟。 NDIS 802.11无线LAN微型端口驱动程序仅助我们一臂之力(例如,网络扫描)。根据我的阅读(并尝试),XP上的802.11 NDIS驱动程序将不允许我们配置无线连接。为此,我们必须使用本机Wifi API。 (如果我错了,请纠正我。)InSSIDer之类的应用程序帮助我理解了API,但是InSSIDer只是一个扫描程序,并不旨在配置Wifi网络。

因此,问题是:在哪里可以找到一些代码示例(Cor C ++),它们处理XP上Wifi网络的配置-例如。配置文件创建和连接管理?

我应该注意,这是封闭系统上的XP Embedded应用程序,我们无法使用内置的无线零配置(WZC)。我们必须将所有Wifi管理功能构建到我们的.NET应用程序中。

是的,我已经将自己变成蓝色。似乎有人应该对此问题有解决方案,但我找不到。这就是为什么我在这里问。

谢谢。

解决方案

回答

我们在XP上使用WZC,在Vista上使用Native WiFi,但这是在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;

要保持与网络的连接,只需生成一个线程,然后继续检查连接,然后根据需要重新连接。

编辑:男人这个标记的东西很la脚。让我喜欢3次编辑以正确处理放屁的事情。

回答

感谢尼克的反馈。我几乎已使配置文件和连接管理正常工作。诀窍是弄清楚XP上不支持Native Wifi API的哪些部分。幸运的是,Managed Wifi API具有可在XP上运行的连接/断开连接通知事件(NetworkChange也提供类似的更改事件)。