XP上的无线管理(SP2/SP3)

问题描述:

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上的无线管理(SP2/SP3)

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

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

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

谢谢。

我们在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个编辑来让事情正确。

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