代码之家  ›  专栏  ›  技术社区  ›  Bob Nadler

XP上的Wifi管理(SP2/SP3)

  •  -1
  • Bob Nadler  · 技术社区  · 16 年前

    Vista上的Wifi支持很好,但是 Native Wifi on XP 是半生不熟的。 NDIS 802.11 Wireless LAN Miniport Drivers 只会让你走一段路(例如,网络扫描)。据我所读(并尝试过),XP上的802.11ndis驱动程序将 允许您配置无线连接。为此,您必须使用本机Wifi API。(如果我错了,请纠正我的错误。)如 InSSIDer 帮助我理解了api,但InSSIDer只是一个扫描仪,并不是用来配置Wifi网络的。

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

    我应该注意,这是一个XP嵌入式应用程序,在一个封闭的系统中,我们不能使用内置的无线零配置(WZC)。我们必须在.NET应用程序中构建所有Wifi管理功能。

    是的,我用谷歌搜索过自己的蓝色。似乎有人应该有办法解决这个问题,但我找不到。这就是我在这里问的原因。

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Bob Nadler    16 年前

    谢谢你的反馈尼克。我基本上已经让配置文件和连接管理工作了。诀窍在于找出本地Wifi API的哪些部分是 XP支持。幸运的是 Managed Wifi API 具有在XP上工作的连接/断开连接通知事件( NetworkChange 也会给出类似的更改事件)。

        2
  •  1
  •   luvieere    14 年前

    我们在XP上使用WZC,在Vista上使用本地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;
    

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

    编辑:伙计,这个标记的东西很烂。我需要3次编辑才能搞定这件事。