-1

Vista 上的 Wifi 支持很好,但XP 上的 Native Wifi是半生不熟。NDIS 802.11 无线 LAN 微型端口驱动程序只为您提供部分途径(例如网络扫描)。根据我阅读(并尝试)的内容,XP 上的 802.11 NDIS 驱动程序不允许您配置无线连接。您必须使用本机 Wifi API 才能执行此操作。(如果我在这里错了,请纠正我。)像InSSIDer这样的应用程序帮助我理解了 API,但 InSSIDer 只是一个扫描仪,并不是为了配置 Wifi 网络而设计的。

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

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

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

谢谢。

4

2 回答 2

1

我们在 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;

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

编辑:伙计,这个标记的东西很蹩脚。需要我进行 3 次编辑才能正确解决问题。

于 2008-08-28T19:11:15.357 回答
1

Thanks for the feedback Nick. I've pretty much gotten the profile and connection management working. The trick is figuring out which parts of the Native Wifi API are not supported on XP. Fortunately, the Managed Wifi API has connect/disconnect notification events that do work on XP (NetworkChange also gives similar change events).

于 2008-08-29T18:17:28.103 回答