admin管理员组文章数量:1627945
利用微软自带的WZC函数来重新编写一个独立于系统的WIFI连接程序。 本人实际操作后,实现扫描,连接等等功能。但是WINCE系统确实是太久远的系统了,此篇文章也是供大家了解一下,WINCE下自带的WIFI功能。
以下是关键节点,大家可以参考一下。
//WCZ库文件
#include <Windows.h> #include "wzcsapi.h" #include <vector> #include "iphlpapi.h" #include <afxmt.h> #pragma comment(lib,"iphlpapi.lib") #pragma comment(lib,"wzcsapi.lib") #pragma comment(lib,"cclib.lib")
//SSID基本信息
typedef struct tag_SsidInfo
{ TCHAR sSsid[MAX_PATH]; // 无线AP SSID int nRssi; // 信号强度 NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; // bAdhoc: 是否点对点的 WIFI 连接 ULONG ulPrivacy; // 加密模式(WEP/WPA....) NDIS_802_11_AUTHENTICATION_MODE AuthenticationMode; // ndisMode 认证模式(Open/Share) int iKeyIndex; // 密匙索引 TCHAR pKey[60]; // 密码 int iEapType; // 802.11 认证模式 int ID; // ID标识符 }SsidInfo;
//CWLanConfig WLAN配置类信息 class CWLanConfig { public: CWLanConfig() { m_fWZCInit = FALSE; m_CardIndex = -1; } BOOL InitZeroConfig(void); //初始化配置 void PrintfMacAddress(IN PRAW_DATA prdMAC); //显示MAC地址 void PrintSSID(PRAW_DATA prdSSID, WCHAR* tSsid ); //显示SSID PTCHAR SupportedRate(IN BYTE ucbRawValue); //支持速率 UINT ChannelNumber(IN ULONG ulFrequency_kHZ); //频率数 void EnumWirelessNetwordCard(void); //权举无线网卡列表 void WirelessQuery(void); //无线询问,获取WLAN网卡基本信息 void GetWirelseeListSSID(const PRAW_DATA prdBSSIDList,PRAW_DATA prdSSID,vector<SsidInfo> &SsidList); //获取SSID基本信息 BOOL WirelessConnect(PTCHAR pCard, PTCHAR pSSID,NDIS_802_11_NETWORK_INFRASTRUCTURE infr, ULONG ulPrivacy, NDIS_802_11_AUTHENTICATION_MODE ndisMode, PTCHAR pKey,int iKeyIndex, int iEapType ,int isconnectid); //连接网络函数 void AddToPreferredNetworkList( IN WCHAR *szWiFiCard, IN WZC_WLAN_CONFIG& wzcConfig1, IN WCHAR *szSsidToConnect); //加入到WINDOUS的首选WIFI网络 void ResetPreferredList(PTCHAR pCard); //断开连接函数 BOOL InterpretEncryptionKeyValue(IN OUT WZC_WLAN_CONFIG& wzcConfig, IN int iKeyIndex, IN PTCHAR pKey, IN BOOL bNeed8021X); //说明加密键值 private: typedef DWORD (*PFN_WZCQueryInterfaceEx)(LPWSTR pSrvAddr,DWORD dwInFlags,PINTF_ENTRY_EX pIntf,LPDWORD pdwOutFlags); typedef DWORD (*PFN_WZCSetInterfaceEx)(LPWSTR pSrvAddr,DWORD dwInFlags,PINTF_ENTRY_EX pIntf,LPDWORD pdwOutFlags); typedef DWORD (*PFN_WZCRefreshInterfaceEx)(LPWSTR pSrvAddr,DWORD dwInFlags,PINTF_ENTRY_EX pIntf,LPDWORD pdwOutFlags); typedef DWORD (*PFN_WZCEnumEapExtensions)(DWORD *pdwNumOfExtensions,PEAP_EXTENSION_INFO *ppEapExtensions); typedef DWORD (*PFN_WZCDeleteIntfObjEx)(PINTF_ENTRY_EX pIntf); typedef DWORD (*PFN_WZCQueryContext)(LPWSTR pSrvAddr,DWORD dwInFlags,PWZC_CONTEXT pContext,LPDWORD pdwOutFlags); typedef DWORD (*PFN_WZCSetContext)(LPWSTR pSrvAddr,DWORD dwInFlags,PWZC_CONTEXT pContext,LPDWORD pdwOutFlags); typedef VOID (*PFN_WZCPassword2Key)(PWZC_WLAN_CONFIG pwzcConfig, LPCSTR cszPassword); PFN_WZCQueryInterfaceEx pfnWZCQueryInterfaceEx; PFN_WZCSetInterfaceEx pfnWZCSetInterfaceEx; PFN_WZCRefreshInterfaceEx pfnWZCRefreshInterfaceEx; PFN_WZCEnumEapExtensions pfnWZCEnumEapExtensions; PFN_WZCDeleteIntfObjEx pfnWZCDeleteIntfObjEx; PFN_WZCQueryContext pfnWZCQueryContext; PFN_WZCSetContext pfnWZCSetContext; PFN_WZCPassword2Key pfnWZCPassword2Key; BOOL m_fWZCInit; int m_CardIndex; TCHAR m_WirelessCard[MAX_PATH]; };
/************************************************************************/ /* 函数名称: InitZeroConfig() */ /* 函数作用: 进行初始化配置 */ /* 检查WZCAPI.dll文件是否在WINCE系统中 */ /************************************************************************/ BOOL CWLanConfig::InitZeroConfig() { HINSTANCE hWZCLib = NULL; if (m_fWZCInit) { return TRUE; // Already initialized } // See if zero config API present in system if ((hWZCLib = LoadLibrary(L"wzcsapi.dll")) == NULL) { //RETAILMSG(1,(TEXT("!WZCUI: WZCAPI.DLL not present in system\r\n"))); return FALSE; } pfnWZCQueryInterfaceEx = (PFN_WZCQueryInterfaceEx)GetProcAddress(hWZCLib,L"WZCQueryInterfaceEx"); pfnWZCSetInterfaceEx = (PFN_WZCSetInterfaceEx)GetProcAddress(hWZCLib,L"WZCSetInterfaceEx"); pfnWZCRefreshInterfaceEx = (PFN_WZCRefreshInterfaceEx)GetProcAddress(hWZCLib,L"WZCRefreshInterfaceEx"); pfnWZCEnumEapExtensions = (PFN_WZCEnumEapExtensions)GetProcAddress(hWZCLib,L"WZCEnumEapExtensions"); pfnWZCDeleteIntfObjEx = (PFN_WZCDeleteIntfObjEx)GetProcAddress(hWZCLib,L"WZCDeleteIntfObjEx"); pfnWZCQueryContext = (PFN_WZCQueryContext)GetProcAddress(hWZCLib,L"WZCQueryContext"); pfnWZCSetContext = (PFN_WZCSetContext)GetProcAddress(hWZCLib,L"WZCSetContext"); pfnWZCPassword2Key = (PFN_WZCPassword2Key)GetProcAddress(hWZCLib,L"WZCPassword2Key"); if ( (pfnWZCQueryInterfaceEx == NULL) || (pfnWZCSetInterfaceEx == NULL) || (pfnWZCRefreshInterfaceEx == NULL) || (pfnWZCEnumEapExtensions == NULL) || (pfnWZCDeleteIntfObjEx == NULL) || (pfnWZCSetContext == NULL) || (pfnWZCQueryContext == NULL) ) { //RETAILMSG(1,(TEXT("!WZCUI: WZCAPI.DLL not present in system\r\n"))); return FALSE; } m_fWZCInit = TRUE; return TRUE; }
/************************************************************************/ /* 函数名称: EnumWirelessNetwordCard() */ /* 函数作用: enumerate wireless network cards detected by WLan */ /* 用WLAN侦查无线网卡 */ /************************************************************************/ void CWLanConfig::EnumWirelessNetwordCard() // arg none { INTFS_KEY_TABLE IntfsTable; IntfsTable.dwNumIntfs = 0; IntfsTable.pIntfs = NULL; _tcscpy(m_WirelessCard, TEXT("")); DW
版权声明:本文标题:WINCE 实现WIFI连接功能(WZC) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729002851a1182723.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论