WINCE 实现WIFI连接功能(WZC)

    利用微软自带的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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值