日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wince下实现wifi无线网络的连接和配置(WLAN)

發布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wince下实现wifi无线网络的连接和配置(WLAN) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在 Windows CE 下自帶有無線網卡的配置和連接程序,但是如果系統剪裁掉了資源管理器和任務欄,或者再CE的很多應用中,是不允許用戶回到桌面去調用系統的連接程序的,這篇文章就來談一下如何用那么可以利用微軟自帶的WZC函數來重新編寫一個獨立于系統的WIFI連接程序。

連接WIFI網絡有這么幾個步驟,第一步,要獲取你自己的網卡,調用GetFirstWirelessNetworkCard()來實現。第二步,要獲得當前環境中的無線網信息,調用GetWirelessCardInfo來取得這些信息,調用GetWirelseeListSSID來解析這些信息,接下來把取得的無線網SSID和自己輸入的密碼用AddToPreferredNetworkList()傳到WINDOWS的首選無線網列表中,windows就會自動連接這個無線網絡。

下面是一整套通過WZC函數連接無線網的程序,我自己測試后保證可以運行,如有需要全部源碼或者動態庫文件的,請留言或者留下郵箱

調用WZC函數需要包含的文件和庫如下:

[cpp] view plaincopyprint?
  • #include <eaputil.h>
  • #include <pm.h>
  • #include <wzcsapi.h>
  • #include <iphlpapi.h>
  • #pragma comment(lib,"Iphlpapi.lib")
  • #pragma comment(lib,"Wzcsapi.lib")
  • #pragma comment(lib,"cclib.lib")
  • #include <eaputil.h> #include <pm.h> #include <wzcsapi.h> #include <iphlpapi.h> #pragma comment(lib,"Iphlpapi.lib") #pragma comment(lib,"Wzcsapi.lib") #pragma comment(lib,"cclib.lib")
    存放SSID的基本信息的數據結構: [cpp] view plaincopyprint?
  • /*SSID基本信息*/
  • typedef struct tag_SsidInfo
  • {
  • wstring sSsid;
  • int nRssi;
  • NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
  • ULONG ulPrivacy;
  • NDIS_802_11_AUTHENTICATION_MODE AuthenticationMode;
  • int iKeyIndex;
  • wstring pKey;
  • int iEapType;
  • }SsidInfo;
  • /*SSID基本信息*/ typedef struct tag_SsidInfo { wstring sSsid; int nRssi; NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; ULONG ulPrivacy; NDIS_802_11_AUTHENTICATION_MODE AuthenticationMode; int iKeyIndex; wstring pKey; int iEapType; }SsidInfo;

    接下來看關鍵函數的具體實現:

    1.取得無線網卡

    [cpp] view plaincopyprint?
  • BOOL GetFirstWirelessCard(PTCHAR pCard)
  • {
  • WifiCallBack=NULL;
  • if (!pCard)
  • {
  • return FALSE;
  • }
  • INTFS_KEY_TABLE IntfsTable;
  • IntfsTable.dwNumIntfs = 0;
  • IntfsTable.pIntfs = NULL;
  • _tcscpy(pCard, TEXT(""));
  • // 枚舉系統中可用的無線網卡
  • DWORD dwStatus = WZCEnumInterfaces(NULL, &IntfsTable);
  • if (dwStatus != ERROR_SUCCESS)
  • {
  • RETAILMSG(1, (TEXT("WZCEnumInterfaces() error 0x%08X\n"),dwStatus));
  • return FALSE;
  • }
  • // 判斷無線網卡的數量,可以根據無線網卡數量來枚舉出所有可用的無線網卡
  • if (!IntfsTable.dwNumIntfs)
  • {
  • RETAILMSG(1, (TEXT("System has no wireless card.\n")));
  • return FALSE;
  • }
  • _tcscpy(pCard, IntfsTable.pIntfs[0].wszGuid);
  • LocalFree(IntfsTable.pIntfs);
  • return TRUE;
  • }
  • BOOL GetFirstWirelessCard(PTCHAR pCard) { WifiCallBack=NULL;if (!pCard) { return FALSE; } INTFS_KEY_TABLE IntfsTable; IntfsTable.dwNumIntfs = 0; IntfsTable.pIntfs = NULL; _tcscpy(pCard, TEXT("")); // 枚舉系統中可用的無線網卡 DWORD dwStatus = WZCEnumInterfaces(NULL, &IntfsTable); if (dwStatus != ERROR_SUCCESS) { RETAILMSG(1, (TEXT("WZCEnumInterfaces() error 0x%08X\n"),dwStatus)); return FALSE; } // 判斷無線網卡的數量,可以根據無線網卡數量來枚舉出所有可用的無線網卡 if (!IntfsTable.dwNumIntfs) { RETAILMSG(1, (TEXT("System has no wireless card.\n"))); return FALSE; } _tcscpy(pCard, IntfsTable.pIntfs[0].wszGuid); LocalFree(IntfsTable.pIntfs); return TRUE; }
    2.從無線網卡取得無線網絡信息 [cpp] view plaincopyprint?
  • //
  • // pCard: 無線網卡 GUID
  • // pIntf: 無線網卡配置信息結果體
  • // pOutFlags: 網卡配置信息掩碼標志
  • //
  • BOOL GetWirelessCardInfo(PTCHAR pCard, PINTF_ENTRY_EX pIntf, PDWORD pOutFlags)
  • {
  • TCHAR *szWiFiCard = NULL;
  • // 參數校驗
  • if (!pCard || !pIntf || !pOutFlags)
  • {
  • //RETAILMSG(1, (TEXT("Param Error.\n")));
  • return FALSE;
  • }
  • szWiFiCard = pCard;
  • *pOutFlags = 0;
  • // 初始化無線網卡信息
  • ZeroMemory(pIntf, sizeof(INTF_ENTRY_EX));
  • // 設置 GUID 號
  • pIntf->wszGuid = szWiFiCard;
  • // 查詢無線網卡信息
  • DWORD dwStatus = WZCQueryInterfaceEx(NULL, INTF_ALL, pIntf, pOutFlags);
  • if (dwStatus != ERROR_SUCCESS)
  • {
  • //RETAILMSG(1, (TEXT("WZCQueryInterfaceEx() error 0x%08X\n"), dwStatus));
  • return FALSE;
  • }
  • return TRUE;
  • }
  • // // pCard: 無線網卡 GUID // pIntf: 無線網卡配置信息結果體 // pOutFlags: 網卡配置信息掩碼標志 // BOOL GetWirelessCardInfo(PTCHAR pCard, PINTF_ENTRY_EX pIntf, PDWORD pOutFlags) { TCHAR *szWiFiCard = NULL; // 參數校驗 if (!pCard || !pIntf || !pOutFlags) { //RETAILMSG(1, (TEXT("Param Error.\n"))); return FALSE; }szWiFiCard = pCard; *pOutFlags = 0; // 初始化無線網卡信息 ZeroMemory(pIntf, sizeof(INTF_ENTRY_EX)); // 設置 GUID 號 pIntf->wszGuid = szWiFiCard; // 查詢無線網卡信息 DWORD dwStatus = WZCQueryInterfaceEx(NULL, INTF_ALL, pIntf, pOutFlags); if (dwStatus != ERROR_SUCCESS) { //RETAILMSG(1, (TEXT("WZCQueryInterfaceEx() error 0x%08X\n"), dwStatus)); return FALSE; } return TRUE; }
    3.解析這些信息,得到需要的無線網參數,ssid,信號強度,加密方式等等


    [cpp] view plaincopyprint?
  • void GetWirelseeListSSID(const PRAW_DATA prdBSSIDList,vector<SsidInfo> &SsidList)
  • {
  • SsidInfo tempInfo;
  • WCHAR tSsid[MAX_PATH];
  • if (prdBSSIDList == NULL || prdBSSIDList->dwDataLen == 0)
  • {
  • // RETAILMSG(DBG_MSG, (TEXT("<null> entry.\n")));
  • return;
  • }
  • else
  • {
  • PWZC_802_11_CONFIG_LIST pConfigList = (PWZC_802_11_CONFIG_LIST)prdBSSIDList->pData;
  • //RETAILMSG(DBG_MSG, (TEXT("[%d] entries.\n"), pConfigList->NumberOfItems));
  • int i;
  • // 枚舉所有無線AP
  • for (i = 0; i < pConfigList->NumberOfItems; i++)
  • {
  • PWZC_WLAN_CONFIG pConfig = &(pConfigList->Config[i]);
  • RAW_DATA rdBuffer;
  • rdBuffer.dwDataLen = pConfig->Ssid.SsidLength;
  • rdBuffer.pData = pConfig->Ssid.Ssid;
  • // 將 SSID 的 ASCII 碼轉化成字符串
  • memset(tSsid,0,sizeof(tSsid));
  • PrintSSID(&rdBuffer, tSsid);
  • tempInfo.sSsid=wstring(tSsid);
  • tempInfo.nRssi=(int)pConfig->Rssi;
  • tempInfo.InfrastructureMode=pConfig->InfrastructureMode;
  • tempInfo.AuthenticationMode=pConfig->AuthenticationMode;
  • tempInfo.ulPrivacy=pConfig->Privacy;
  • if (WifiCallBack)
  • {
  • WifiCallBack(tempInfo);
  • }
  • SsidList.push_back(tempInfo);
  • }
  • }
  • }
  • void GetWirelseeListSSID(const PRAW_DATA prdBSSIDList,vector<SsidInfo> &SsidList) {SsidInfo tempInfo;WCHAR tSsid[MAX_PATH];if (prdBSSIDList == NULL || prdBSSIDList->dwDataLen == 0){// RETAILMSG(DBG_MSG, (TEXT("<null> entry.\n")));return;}else{PWZC_802_11_CONFIG_LIST pConfigList = (PWZC_802_11_CONFIG_LIST)prdBSSIDList->pData;//RETAILMSG(DBG_MSG, (TEXT("[%d] entries.\n"), pConfigList->NumberOfItems));int i;// 枚舉所有無線APfor (i = 0; i < pConfigList->NumberOfItems; i++){PWZC_WLAN_CONFIG pConfig = &(pConfigList->Config[i]);RAW_DATA rdBuffer;rdBuffer.dwDataLen = pConfig->Ssid.SsidLength;rdBuffer.pData = pConfig->Ssid.Ssid;// 將 SSID 的 ASCII 碼轉化成字符串memset(tSsid,0,sizeof(tSsid));PrintSSID(&rdBuffer, tSsid);tempInfo.sSsid=wstring(tSsid);tempInfo.nRssi=(int)pConfig->Rssi;tempInfo.InfrastructureMode=pConfig->InfrastructureMode;tempInfo.AuthenticationMode=pConfig->AuthenticationMode;tempInfo.ulPrivacy=pConfig->Privacy;if (WifiCallBack){WifiCallBack(tempInfo);}SsidList.push_back(tempInfo);}} }取得無線網的SSID名稱 [cpp] view plaincopyprint?
  • void PrintSSID
  • // some RAW_DATA is a SSID, this function is for printing SSID
  • (
  • PRAW_DATA prdSSID, // RAW SSID data
  • WCHAR* tSsid
  • )
  • {
  • if (prdSSID == NULL || prdSSID->dwDataLen == 0)
  • wprintf(L"<NULL>");
  • else
  • {
  • WCHAR szSsid[33];
  • MultiByteToWideChar(CP_ACP,0,(LPCSTR)prdSSID->pData,-1,tSsid,MAX_PATH*2);
  • }
  • } // PrintSSID()
  • void PrintSSID // some RAW_DATA is a SSID, this function is for printing SSID (PRAW_DATA prdSSID, // RAW SSID dataWCHAR* tSsid ) {if (prdSSID == NULL || prdSSID->dwDataLen == 0)wprintf(L"<NULL>");else{WCHAR szSsid[33];MultiByteToWideChar(CP_ACP,0,(LPCSTR)prdSSID->pData,-1,tSsid,MAX_PATH*2);}} // PrintSSID()
    4.根據上面得到的信息,加上用戶輸入的密碼,生成的信息交給WINDOWS 的首選網絡列表 [cpp] view plaincopyprint?
  • 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)
  • //pCard: 無線網卡 GUID;pSSID: 無線AP SSID;bAdhoc: 是否點對點的 WIFI 連接;ulPrivacy: 加密模式(WEP/WPA....) ;
  • //ndisMode: 認證模式(Open/Share);iKeyIndex: 密鑰索引(1-4);pKey: 密碼;iEapType: 802.11 認證模式
  • {
  • ResetPreferredList(pCard);
  • BOOL bRet = FALSE;
  • if (!pSSID)
  • {
  • return FALSE;
  • }
  • else
  • {
  • WZC_WLAN_CONFIG wzcConfig;
  • ZeroMemory(&wzcConfig, sizeof(WZC_WLAN_CONFIG));
  • wzcConfig.Length = sizeof(WZC_WLAN_CONFIG);
  • wzcConfig.dwCtlFlags = 0;
  • wzcConfig.Ssid.SsidLength = _tcslen(pSSID);
  • for (UINT i = 0; i < wzcConfig.Ssid.SsidLength; i++)
  • {
  • wzcConfig.Ssid.Ssid[i] = (CHAR)pSSID[i];
  • }
  • wzcConfig.InfrastructureMode = infr;
  • wzcConfig.AuthenticationMode = ndisMode;
  • wzcConfig.Privacy = ulPrivacy;
  • if (pKey == NULL || _tcslen(pKey) == 0)
  • {
  • // 對密鑰進行轉換
  • bRet = InterpretEncryptionKeyValue(wzcConfig, 0, NULL, TRUE);
  • wzcConfig.EapolParams.dwEapType = iEapType;
  • wzcConfig.EapolParams.dwEapType =EAP_TYPE_TLS;
  • wzcConfig.EapolParams.dwEapFlags = EAPOL_ENABLED;
  • wzcConfig.EapolParams.bEnable8021x = TRUE;
  • wzcConfig.EapolParams.dwAuthDataLen = 0;
  • wzcConfig.EapolParams.pbAuthData = 0;
  • }
  • else
  • {
  • // RETAILMSG(DBG_MSG, (TEXT("WirelessConnect iKeyIndex = %d.\n"), iKeyIndex));
  • bRet = InterpretEncryptionKeyValue(wzcConfig, iKeyIndex, pKey, FALSE);
  • }
  • // 連接到指定的無線AP,并將該AP添加到首先無線AP中
  • AddToPreferredNetworkList(pCard, wzcConfig, pSSID);
  • }
  • return bRet;
  • }
  • 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) //pCard: 無線網卡 GUID;pSSID: 無線AP SSID;bAdhoc: 是否點對點的 WIFI 連接;ulPrivacy: 加密模式(WEP/WPA....) ; //ndisMode: 認證模式(Open/Share);iKeyIndex: 密鑰索引(1-4);pKey: 密碼;iEapType: 802.11 認證模式 {ResetPreferredList(pCard);BOOL bRet = FALSE; if (!pSSID) { return FALSE; } else { WZC_WLAN_CONFIG wzcConfig; ZeroMemory(&wzcConfig, sizeof(WZC_WLAN_CONFIG)); wzcConfig.Length = sizeof(WZC_WLAN_CONFIG); wzcConfig.dwCtlFlags = 0; wzcConfig.Ssid.SsidLength = _tcslen(pSSID); for (UINT i = 0; i < wzcConfig.Ssid.SsidLength; i++) { wzcConfig.Ssid.Ssid[i] = (CHAR)pSSID[i]; } wzcConfig.InfrastructureMode = infr;wzcConfig.AuthenticationMode = ndisMode; wzcConfig.Privacy = ulPrivacy; if (pKey == NULL || _tcslen(pKey) == 0) { // 對密鑰進行轉換 bRet = InterpretEncryptionKeyValue(wzcConfig, 0, NULL, TRUE); wzcConfig.EapolParams.dwEapType = iEapType;wzcConfig.EapolParams.dwEapType =EAP_TYPE_TLS;wzcConfig.EapolParams.dwEapFlags = EAPOL_ENABLED; wzcConfig.EapolParams.bEnable8021x = TRUE; wzcConfig.EapolParams.dwAuthDataLen = 0; wzcConfig.EapolParams.pbAuthData = 0; } else { // RETAILMSG(DBG_MSG, (TEXT("WirelessConnect iKeyIndex = %d.\n"), iKeyIndex)); bRet = InterpretEncryptionKeyValue(wzcConfig, iKeyIndex, pKey, FALSE); } // 連接到指定的無線AP,并將該AP添加到首先無線AP中 AddToPreferredNetworkList(pCard, wzcConfig, pSSID); } return bRet; }
    5.加入WINDOWS的首選網絡列表 [cpp] view plaincopyprint?
  • void AddToPreferredNetworkList
  • // adding to the [Preferred Networks]
  • // [Preferred Networks] is a list of SSIDs in preference order.
  • // WZC continuously scans available SSIDs and attempt to connect to the most preferable SSID.
  • (
  • IN WCHAR *szWiFiCard,
  • IN WZC_WLAN_CONFIG& wzcConfig1,
  • IN WCHAR *szSsidToConnect
  • )
  • {
  • DWORD dwOutFlags = 0;
  • INTF_ENTRY_EX Intf;
  • memset(&Intf, 0x00, sizeof(INTF_ENTRY_EX));
  • Intf.wszGuid = szWiFiCard;
  • DWORD dwStatus = WZCQueryInterfaceEx(
  • NULL,
  • INTF_ALL,
  • &Intf,
  • &dwOutFlags);
  • if(dwStatus)
  • {
  • wprintf(L"WZCQueryInterfaceEx() error dwStatus=0x%0X, dwOutFlags=0x%0X", dwStatus, dwOutFlags);
  • WZCDeleteIntfObjEx(&Intf);
  • return;
  • }
  • WZC_802_11_CONFIG_LIST *pConfigList = (PWZC_802_11_CONFIG_LIST)Intf.rdStSSIDList.pData;
  • if(!pConfigList) // empty [Preferred Networks] list case
  • {
  • DWORD dwDataLen = sizeof(WZC_802_11_CONFIG_LIST);
  • WZC_802_11_CONFIG_LIST *pNewConfigList = (WZC_802_11_CONFIG_LIST *)LocalAlloc(LPTR, dwDataLen);
  • pNewConfigList->NumberOfItems = 1;
  • pNewConfigList->Index = 0;
  • memcpy(pNewConfigList->Config, &wzcConfig1, sizeof(wzcConfig1));
  • Intf.rdStSSIDList.pData = (BYTE*)pNewConfigList;
  • Intf.rdStSSIDList.dwDataLen = dwDataLen;
  • }
  • else
  • {
  • ULONG uiNumberOfItems = pConfigList->NumberOfItems;
  • for(UINT i=0; i<uiNumberOfItems; i++)
  • {
  • if(memcmp(&wzcConfig1.Ssid, &pConfigList->Config[i].Ssid, sizeof(NDIS_802_11_SSID)) == 0)
  • {
  • wprintf(L"%s is already in the [Preferred Networks] list", szSsidToConnect);
  • WZCDeleteIntfObjEx(&Intf);
  • return;
  • }
  • }
  • wprintf(L"SSID List has [%d] entries.\n", uiNumberOfItems);
  • wprintf(L"adding %s to the top of [Preferred Networks]\n", szSsidToConnect); // this will be the most preferable SSID
  • DWORD dwDataLen = sizeof(WZC_802_11_CONFIG_LIST) + (uiNumberOfItems+1)*sizeof(WZC_WLAN_CONFIG);
  • WZC_802_11_CONFIG_LIST *pNewConfigList = (WZC_802_11_CONFIG_LIST *)LocalAlloc(LPTR, dwDataLen);
  • pNewConfigList->NumberOfItems = uiNumberOfItems + 1;
  • pNewConfigList->Index = 0;
  • memcpy(pNewConfigList->Config, &wzcConfig1, sizeof(wzcConfig1));
  • if(pConfigList->NumberOfItems)
  • {
  • pNewConfigList->Index = pConfigList->Index;
  • memcpy(pNewConfigList->Config+1, pConfigList->Config, (uiNumberOfItems)*sizeof(WZC_WLAN_CONFIG));
  • LocalFree(pConfigList);
  • pConfigList = NULL;
  • }
  • Intf.rdStSSIDList.pData = (BYTE*)pNewConfigList;
  • Intf.rdStSSIDList.dwDataLen = dwDataLen;
  • }
  • dwStatus = WZCSetInterfaceEx(NULL, INTF_PREFLIST, &Intf, &dwOutFlags);
  • if(dwStatus)
  • wprintf(L"WZCSetInterfaceEx() error dwStatus=0x%0X, dwOutFlags=0x%0X", dwStatus, dwOutFlags);
  • WZCDeleteIntfObjEx(&Intf);
  • } // AddToPreferredNetworkList()
  • void AddToPreferredNetworkList // adding to the [Preferred Networks] // [Preferred Networks] is a list of SSIDs in preference order. // WZC continuously scans available SSIDs and attempt to connect to the most preferable SSID. (IN WCHAR *szWiFiCard,IN WZC_WLAN_CONFIG& wzcConfig1,IN WCHAR *szSsidToConnect) {DWORD dwOutFlags = 0;INTF_ENTRY_EX Intf;memset(&Intf, 0x00, sizeof(INTF_ENTRY_EX));Intf.wszGuid = szWiFiCard;DWORD dwStatus = WZCQueryInterfaceEx(NULL, INTF_ALL,&Intf, &dwOutFlags);if(dwStatus){wprintf(L"WZCQueryInterfaceEx() error dwStatus=0x%0X, dwOutFlags=0x%0X", dwStatus, dwOutFlags);WZCDeleteIntfObjEx(&Intf);return;}WZC_802_11_CONFIG_LIST *pConfigList = (PWZC_802_11_CONFIG_LIST)Intf.rdStSSIDList.pData;if(!pConfigList) // empty [Preferred Networks] list case{DWORD dwDataLen = sizeof(WZC_802_11_CONFIG_LIST);WZC_802_11_CONFIG_LIST *pNewConfigList = (WZC_802_11_CONFIG_LIST *)LocalAlloc(LPTR, dwDataLen);pNewConfigList->NumberOfItems = 1;pNewConfigList->Index = 0;memcpy(pNewConfigList->Config, &wzcConfig1, sizeof(wzcConfig1));Intf.rdStSSIDList.pData = (BYTE*)pNewConfigList;Intf.rdStSSIDList.dwDataLen = dwDataLen;}else{ULONG uiNumberOfItems = pConfigList->NumberOfItems;for(UINT i=0; i<uiNumberOfItems; i++){if(memcmp(&wzcConfig1.Ssid, &pConfigList->Config[i].Ssid, sizeof(NDIS_802_11_SSID)) == 0){wprintf(L"%s is already in the [Preferred Networks] list", szSsidToConnect);WZCDeleteIntfObjEx(&Intf);return;}}wprintf(L"SSID List has [%d] entries.\n", uiNumberOfItems);wprintf(L"adding %s to the top of [Preferred Networks]\n", szSsidToConnect); // this will be the most preferable SSIDDWORD dwDataLen = sizeof(WZC_802_11_CONFIG_LIST) + (uiNumberOfItems+1)*sizeof(WZC_WLAN_CONFIG);WZC_802_11_CONFIG_LIST *pNewConfigList = (WZC_802_11_CONFIG_LIST *)LocalAlloc(LPTR, dwDataLen);pNewConfigList->NumberOfItems = uiNumberOfItems + 1;pNewConfigList->Index = 0;memcpy(pNewConfigList->Config, &wzcConfig1, sizeof(wzcConfig1));if(pConfigList->NumberOfItems){pNewConfigList->Index = pConfigList->Index;memcpy(pNewConfigList->Config+1, pConfigList->Config, (uiNumberOfItems)*sizeof(WZC_WLAN_CONFIG));LocalFree(pConfigList);pConfigList = NULL;}Intf.rdStSSIDList.pData = (BYTE*)pNewConfigList;Intf.rdStSSIDList.dwDataLen = dwDataLen;}dwStatus = WZCSetInterfaceEx(NULL, INTF_PREFLIST, &Intf, &dwOutFlags);if(dwStatus)wprintf(L"WZCSetInterfaceEx() error dwStatus=0x%0X, dwOutFlags=0x%0X", dwStatus, dwOutFlags);WZCDeleteIntfObjEx(&Intf); } // AddToPreferredNetworkList()
    6.重置WINDOWS的首選網絡列表 [cpp] view plaincopyprint?
  • void ResetPreferredList
  • // reset the [Preferred Networks], so wireless will be disconnected
  • // wzctool -reset cisco1
  • // reset CISCO1 adapter.
  • // wzctool -reset
  • // reset the first wireless adapter found in the system
  • (
  • PTCHAR pCard
  • )
  • {
  • WCHAR *szWiFiCard = NULL;
  • szWiFiCard = pCard;
  • DWORD dwInFlags = 0;
  • INTF_ENTRY_EX Intf;
  • memset(&Intf, 0x00, sizeof(INTF_ENTRY_EX));
  • Intf.wszGuid = szWiFiCard;
  • DWORD dwStatus = WZCSetInterfaceEx(NULL, INTF_PREFLIST, &Intf, &dwInFlags);
  • if(dwStatus)
  • wprintf(L"WZCSetInterfaceEx() error dwStatus=0x%0X, dwOutFlags=0x%0X", dwStatus, dwInFlags);
  • else
  • wprintf(L"now, WZC resets [Preferred Networks]\n");
  • } // ResetPreferredList()
  • void ResetPreferredList // reset the [Preferred Networks], so wireless will be disconnected // wzctool -reset cisco1 // reset CISCO1 adapter. // wzctool -reset // reset the first wireless adapter found in the system ( PTCHAR pCard ) {WCHAR *szWiFiCard = NULL;szWiFiCard = pCard;DWORD dwInFlags = 0;INTF_ENTRY_EX Intf;memset(&Intf, 0x00, sizeof(INTF_ENTRY_EX));Intf.wszGuid = szWiFiCard;DWORD dwStatus = WZCSetInterfaceEx(NULL, INTF_PREFLIST, &Intf, &dwInFlags);if(dwStatus)wprintf(L"WZCSetInterfaceEx() error dwStatus=0x%0X, dwOutFlags=0x%0X", dwStatus, dwInFlags);elsewprintf(L"now, WZC resets [Preferred Networks]\n"); } // ResetPreferredList()
    7.判斷網卡是否連接到了無線網絡 [cpp] view plaincopyprint?
  • BOOL IsWifiConnected(PTCHAR pCard,DWORD * pAdd)
  • {
  • BOOL bHasDefaultRoute = FALSE;
  • ULONG wifiindex =0;
  • if(NO_ERROR == GetAdapterIndex(pCard,&wifiindex))
  • {
  • DWORD dwTableSize = 0;
  • GetIpAddrTable(NULL, &dwTableSize, FALSE);
  • if (dwTableSize)
  • {
  • MIB_IPADDRTABLE* pft;
  • pft = (MIB_IPADDRTABLE*)malloc(dwTableSize);
  • if (pft)
  • {
  • if (GetIpAddrTable(pft, &dwTableSize, TRUE) == NO_ERROR)
  • {
  • for (ulong nIndex = 0; nIndex < pft->dwNumEntries; nIndex++)
  • {
  • if (pft->table[nIndex].dwIndex == wifiindex)
  • {
  • printf("get wifi index\n");
  • printf("wifi add=%x\n",pft->table[nIndex].dwAddr);
  • if (0!=pft->table[nIndex].dwAddr)
  • {
  • bHasDefaultRoute = TRUE;
  • if (pAdd)
  • {
  • *pAdd = pft->table[nIndex].dwAddr;
  • }
  • }
  • break;
  • }
  • }
  • }
  • free(pft);
  • }
  • }
  • }
  • return bHasDefaultRoute;
  • }
  • BOOL IsWifiConnected(PTCHAR pCard,DWORD * pAdd) {BOOL bHasDefaultRoute = FALSE;ULONG wifiindex =0;if(NO_ERROR == GetAdapterIndex(pCard,&wifiindex)){DWORD dwTableSize = 0;GetIpAddrTable(NULL, &dwTableSize, FALSE);if (dwTableSize){MIB_IPADDRTABLE* pft;pft = (MIB_IPADDRTABLE*)malloc(dwTableSize);if (pft){if (GetIpAddrTable(pft, &dwTableSize, TRUE) == NO_ERROR){for (ulong nIndex = 0; nIndex < pft->dwNumEntries; nIndex++){if (pft->table[nIndex].dwIndex == wifiindex){printf("get wifi index\n");printf("wifi add=%x\n",pft->table[nIndex].dwAddr);if (0!=pft->table[nIndex].dwAddr){bHasDefaultRoute = TRUE;if (pAdd){*pAdd = pft->table[nIndex].dwAddr;}}break;}}}free(pft);}}}return bHasDefaultRoute; }
    8.密碼加密算法 [cpp] view plaincopyprint?
  • static void EncryptWepKMaterial(IN OUT WZC_WLAN_CONFIG* pwzcConfig)
  • {
  • BYTE chFakeKeyMaterial[] = { 0x56, 0x09, 0x08, 0x98, 0x4D, 0x08, 0x11, 0x66, 0x42, 0x03, 0x01, 0x67, 0x66 };
  • for (int i = 0; i < WZCCTL_MAX_WEPK_MATERIAL; i++)
  • pwzcConfig->KeyMaterial[i] ^= chFakeKeyMaterial[(7*i)%13];
  • }
  • static void EncryptWepKMaterial(IN OUT WZC_WLAN_CONFIG* pwzcConfig) { BYTE chFakeKeyMaterial[] = { 0x56, 0x09, 0x08, 0x98, 0x4D, 0x08, 0x11, 0x66, 0x42, 0x03, 0x01, 0x67, 0x66 }; for (int i = 0; i < WZCCTL_MAX_WEPK_MATERIAL; i++) pwzcConfig->KeyMaterial[i] ^= chFakeKeyMaterial[(7*i)%13]; } [cpp] view plaincopyprint?
  • BOOL InterpretEncryptionKeyValue(IN OUT WZC_WLAN_CONFIG& wzcConfig, IN int iKeyIndex, IN PTCHAR pKey, IN BOOL bNeed8021X)
  • {
  • if(wzcConfig.Privacy == Ndis802_11WEPEnabled)
  • {
  • if(!bNeed8021X && pKey)
  • {
  • wzcConfig.KeyIndex = iKeyIndex;
  • wzcConfig.KeyLength = _tcslen(pKey);
  • if((wzcConfig.KeyLength == 5) || (wzcConfig.KeyLength == 13))
  • {
  • for(UINT i=0; i<wzcConfig.KeyLength; i++)
  • wzcConfig.KeyMaterial[i] = (UCHAR)pKey[i];
  • }
  • else
  • {
  • if((pKey[0] != TEXT('0')) || (pKey[1] != TEXT('x')))
  • {
  • // RETAILMSG(DBG_MSG, (TEXT("Invalid key value.\n")));
  • return FALSE;
  • }
  • pKey += 2;
  • wzcConfig.KeyLength = wcslen(pKey);
  • if((wzcConfig.KeyLength != 10) && (wzcConfig.KeyLength != 26))
  • {
  • // RETAILMSG(DBG_MSG, (TEXT("Invalid key value.\n")));
  • return FALSE;
  • }
  • wzcConfig.KeyLength >>= 1;
  • for(UINT i=0; i<wzcConfig.KeyLength; i++)
  • {
  • wzcConfig.KeyMaterial[i] = (HEX(pKey[2 * i]) << 4) | HEX(pKey[2 * i + 1]);
  • }
  • }
  • EncryptWepKMaterial(&wzcConfig);
  • wzcConfig.dwCtlFlags |= WZCCTL_WEPK_PRESENT;
  • }
  • }
  • else if(wzcConfig.Privacy == Ndis802_11Encryption2Enabled
  • || wzcConfig.Privacy == Ndis802_11Encryption3Enabled)
  • {
  • if(!bNeed8021X)
  • {
  • wzcConfig.KeyLength = wcslen(pKey);
  • if((wzcConfig.KeyLength < 8) || (wzcConfig.KeyLength > 63))
  • {
  • // RETAILMSG(DBG_MSG, (TEXT("WPA-PSK/TKIP key should be 8-63 char long string.\n")));
  • return FALSE;
  • }
  • char szEncryptionKeyValue8[64]; // longest key is 63
  • memset(szEncryptionKeyValue8, 0, sizeof(szEncryptionKeyValue8));
  • WideCharToMultiByte(CP_ACP,
  • 0,
  • pKey,
  • wzcConfig.KeyLength + 1,
  • szEncryptionKeyValue8,
  • wzcConfig.KeyLength + 1,
  • NULL,
  • NULL);
  • WZCPassword2Key(&wzcConfig, szEncryptionKeyValue8);
  • EncryptWepKMaterial(&wzcConfig);
  • wzcConfig.dwCtlFlags |= WZCCTL_WEPK_XFORMAT
  • | WZCCTL_WEPK_PRESENT
  • | WZCCTL_ONEX_ENABLED;
  • }
  • wzcConfig.EapolParams.dwEapFlags = EAPOL_ENABLED;
  • wzcConfig.EapolParams.dwEapType = DEFAULT_EAP_TYPE;
  • wzcConfig.EapolParams.bEnable8021x = TRUE;
  • wzcConfig.WPAMCastCipher = Ndis802_11Encryption2Enabled;
  • }
  • return TRUE;
  • }
  • BOOL InterpretEncryptionKeyValue(IN OUT WZC_WLAN_CONFIG& wzcConfig, IN int iKeyIndex, IN PTCHAR pKey, IN BOOL bNeed8021X) { if(wzcConfig.Privacy == Ndis802_11WEPEnabled) { if(!bNeed8021X && pKey) { wzcConfig.KeyIndex = iKeyIndex; wzcConfig.KeyLength = _tcslen(pKey); if((wzcConfig.KeyLength == 5) || (wzcConfig.KeyLength == 13)) { for(UINT i=0; i<wzcConfig.KeyLength; i++) wzcConfig.KeyMaterial[i] = (UCHAR)pKey[i]; } else { if((pKey[0] != TEXT('0')) || (pKey[1] != TEXT('x'))) { // RETAILMSG(DBG_MSG, (TEXT("Invalid key value.\n"))); return FALSE; } pKey += 2; wzcConfig.KeyLength = wcslen(pKey); if((wzcConfig.KeyLength != 10) && (wzcConfig.KeyLength != 26)) { // RETAILMSG(DBG_MSG, (TEXT("Invalid key value.\n"))); return FALSE; } wzcConfig.KeyLength >>= 1; for(UINT i=0; i<wzcConfig.KeyLength; i++) { wzcConfig.KeyMaterial[i] = (HEX(pKey[2 * i]) << 4) | HEX(pKey[2 * i + 1]); } } EncryptWepKMaterial(&wzcConfig); wzcConfig.dwCtlFlags |= WZCCTL_WEPK_PRESENT; } } else if(wzcConfig.Privacy == Ndis802_11Encryption2Enabled || wzcConfig.Privacy == Ndis802_11Encryption3Enabled) { if(!bNeed8021X) { wzcConfig.KeyLength = wcslen(pKey); if((wzcConfig.KeyLength < 8) || (wzcConfig.KeyLength > 63)) { // RETAILMSG(DBG_MSG, (TEXT("WPA-PSK/TKIP key should be 8-63 char long string.\n"))); return FALSE; } char szEncryptionKeyValue8[64]; // longest key is 63 memset(szEncryptionKeyValue8, 0, sizeof(szEncryptionKeyValue8)); WideCharToMultiByte(CP_ACP, 0, pKey, wzcConfig.KeyLength + 1, szEncryptionKeyValue8, wzcConfig.KeyLength + 1, NULL, NULL); WZCPassword2Key(&wzcConfig, szEncryptionKeyValue8); EncryptWepKMaterial(&wzcConfig); wzcConfig.dwCtlFlags |= WZCCTL_WEPK_XFORMAT | WZCCTL_WEPK_PRESENT | WZCCTL_ONEX_ENABLED; } wzcConfig.EapolParams.dwEapFlags = EAPOL_ENABLED; wzcConfig.EapolParams.dwEapType = DEFAULT_EAP_TYPE; wzcConfig.EapolParams.bEnable8021x = TRUE; wzcConfig.WPAMCastCipher = Ndis802_11Encryption2Enabled; } return TRUE; }


    總結

    以上是生活随笔為你收集整理的wince下实现wifi无线网络的连接和配置(WLAN)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产电影免费观看高清完整版视频 | 色站av| 中文字幕天堂网 | 玉女心经在线看 | 污污小说在线观看 | 中文字幕欧美日韩 | 国产精品高潮呻吟 | 日韩美女视频在线 | 婷婷777| 精品国产www | 久久久精品99 | 麻豆精品国产 | 成人午夜视频免费观看 | h小视频在线观看 | 粉嫩一区 | 亚洲国产成人在线 | 亚洲国产理论 | 精品人妻少妇嫩草av无码专区 | 国产哺乳奶水91在线播放 | 欧美日韩国产在线观看 | 狠狠97| 青青久在线视频 | av图片在线 | 亚洲无码精品国产 | 中文一区二区在线播放 | 色www亚洲国产张柏芝 | 影音先锋中文字幕人妻 | 久久久久国产一区 | 日韩欧美操| 大胸奶汁乳流奶水出来h | 黄瓜视频色版 | 天堂影院av| 麻豆一区二区 | av免费大片 | 午夜免费观看 | 日本欧美一区二区三区不卡视频 | 日日夜夜2017| 日韩一中文字幕 | 久久久999精品视频 国产在线xx | 韩产日产国产欧产 | 国产制服丝袜在线 | 亚洲 欧美 激情 另类 | 欧美亚洲国产一区二区三区 | 日本中文字幕在线播放 | 日韩av一二三区 | 国产精品传媒视频 | 久久久久久婷婷 | 国产aa大片 | 入禽太深免费视频 | 中国极品少妇xxxx做受 | 中文字幕在线天堂 | 欧美一区二区三区影院 | 美女穴穴 | 亚洲精品一区二区三区精华液 | 成人免费黄色片 | 成人午夜精品一区二区三区 | 99热香蕉 | av激情久久 | 操到喷水| 视频在线亚洲 | 亚洲久久影院 | 亚洲精品欧美日韩 | 国产成人精品久久久 | 绿帽av| 欧美毛片在线 | 国产精品成人无码专区 | 婷婷六月色 | 国产激情啪啪 | 永久视频在线观看 | 天天拍天天射 | 宝贝乖h调教灌尿穿环 | 青青青视频免费 | 九九热精品视频在线 | 99热只有这里有精品 | 好看的中文字幕av | 依人综合网 | 青青草手机视频在线观看 | 亚洲天堂网在线观看视频 | 激情久久视频 | www.白丝 | 亚洲国产日韩欧美一区二区三区 | 免费毛片看 | 天天综合久久 | 久久久久一区二区三区四区 | 日本人极品人妖高潮 | 日韩欧美一级大片 | 男人的天堂一区 | 亚洲av无码一区二区三区人妖 | 在线播放的av | 美女被男人插 | 麻豆av一区二区 | 一区二区三区在线观 | 欧美孕交视频 | 插吧插吧综合网 | 少妇高潮一区二区三区四区 | 久久精品女人 | 久久久天堂 | 狂野欧美性猛交xxⅹ李丽珍 | 中文字幕在线日本 |