Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking XP上的Wifi管理(SP2/SP3)_Networking_Windows Xp_Wireless_Wifi - Fatal编程技术网

Networking XP上的Wifi管理(SP2/SP3)

Networking XP上的Wifi管理(SP2/SP3),networking,windows-xp,wireless,wifi,Networking,Windows Xp,Wireless,Wifi,Vista上的Wifi支持不错,但还不够成熟。只会让你部分到达那里(例如网络扫描)。据我所知(并尝试过),XP上的802.11 NDIS驱动程序将不允许您配置无线连接。为此,您必须使用本机Wifi API。(如果我错了,请纠正我。)像这样的应用程序帮助我理解了API,但InSSIDer只是一个扫描器,不用于配置Wifi网络 因此,问题是:我在哪里可以找到一些处理XP上Wifi网络配置的代码示例(C#或C++),例如配置文件创建和连接管理 我应该注意,这是一个XP嵌入式应用程序,在一个封闭的系统中

Vista上的Wifi支持不错,但还不够成熟。只会让你部分到达那里(例如网络扫描)。据我所知(并尝试过),XP上的802.11 NDIS驱动程序将不允许您配置无线连接。为此,您必须使用本机Wifi API。(如果我错了,请纠正我。)像这样的应用程序帮助我理解了API,但InSSIDer只是一个扫描器,不用于配置Wifi网络

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

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

是的,我用谷歌搜索了一下自己。看来应该有人能解决这个问题,但我找不到。这就是我在这里问的原因


谢谢。

我们在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;
检查连接:

    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次编辑才能把事情做好。

谢谢你的反馈,尼克。我的个人资料和连接管理基本正常。诀窍在于找出XP不支持本机Wifi API的部分。幸运的是,具有在XP上工作的连接/断开连接通知事件(也提供类似的更改事件)