XP(SP2 / SP3)上的Wifi管理
时间:2020-03-05 18:44:14 来源:igfitidea点击:
Vista上的Wifi支持很好,但是XP上的Native Wifi刚好成熟。 NDIS 802.11无线LAN微型端口驱动程序仅助我们一臂之力(例如,网络扫描)。根据我的阅读(并尝试),XP上的802.11 NDIS驱动程序将不允许我们配置无线连接。为此,我们必须使用本机Wifi API。 (如果我错了,请纠正我。)InSSIDer之类的应用程序帮助我理解了API,但是InSSIDer只是一个扫描程序,并不旨在配置Wifi网络。
因此,问题是:在哪里可以找到一些代码示例(Cor C ++),它们处理XP上Wifi网络的配置-例如。配置文件创建和连接管理?
我应该注意,这是封闭系统上的XP Embedded应用程序,我们无法使用内置的无线零配置(WZC)。我们必须将所有Wifi管理功能构建到我们的.NET应用程序中。
是的,我已经将自己变成蓝色。似乎有人应该对此问题有解决方案,但我找不到。这就是为什么我在这里问。
谢谢。
解决方案
回答
我们在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;
要保持与网络的连接,只需生成一个线程,然后继续检查连接,然后根据需要重新连接。
编辑:男人这个标记的东西很la脚。让我喜欢3次编辑以正确处理放屁的事情。
回答
感谢尼克的反馈。我几乎已使配置文件和连接管理正常工作。诀窍是弄清楚XP上不支持Native Wifi API的哪些部分。幸运的是,Managed Wifi API具有可在XP上运行的连接/断开连接通知事件(NetworkChange也提供类似的更改事件)。