XP上的Wifi管理(SP2 / SP3)

时间:2008-08-28 04:38:16

标签: networking windows-xp wireless wifi

Vista上的Wifi支持很好,但是Native Wifi on XP已经完成了一半。 NDIS 802.11 Wireless LAN Miniport Drivers只能让您参与其中(例如网络扫描)。根据我的阅读(和尝试过),XP上的802.11 NDIS驱动程序将允许您配置无线连接。您必须使用Native Wifi API才能执行此操作。 (如果我在这里错了,请纠正我。)像InSSIDer这样的应用程序帮助我理解了API,但是InSSIDer只是一个扫描仪而不是用来配置Wifi网络。

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

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

我们在Vista上使用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;

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

编辑:这个标记的东西是蹩脚的。让我喜欢3次编辑,以确定正确的事情。

答案 1 :(得分:1)

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