青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

WinCE 5.0 WIFI 無線網(wǎng)卡的配置和建立連接(轉(zhuǎn))

在 Windows CE 下自帶有無線網(wǎng)卡的配置和連接程序,可是我的系統(tǒng)剪裁掉了資源管理器和任務(wù)欄,導(dǎo)致自帶的無線網(wǎng)卡配置程序不能再使用了,只好自力更生。

我的環(huán)境是 S3C2440 + WinCE 5.0 + VNUWCL5(威盛無線網(wǎng)卡)及驅(qū)動程序。使用 Automatic Configuration Functions API

一、枚舉系統(tǒng)中可用的無線網(wǎng)絡(luò)設(shè)備

      下面的函數(shù)可以枚舉出系統(tǒng)中所有可用的無線網(wǎng)卡設(shè)備的GUID,為了簡化,我選擇第一塊可用的無線網(wǎng)卡來操作      

BOOL GetFirstWirelessCard(PTCHAR pCard)
{
if (!pCard)
{
return FALSE;
}
INTFS_KEY_TABLE IntfsTable;
IntfsTable.dwNumIntfs = 0;
IntfsTable.pIntfs = NULL;
_tcscpy(pCard, TEXT(""));
// 枚舉系統(tǒng)中可用的無線網(wǎng)卡
DWORD dwStatus = WZCEnumInterfaces(NULL, &IntfsTable);
if (dwStatus != ERROR_SUCCESS)
{
RETAILMSG(DBG_MSG, (TEXT("WZCEnumInterfaces() error 0x%08X\n"),dwStatus));
return FALSE;
}
// 判斷無線網(wǎng)卡的數(shù)量,可以根據(jù)無線網(wǎng)卡數(shù)量來枚舉出所有可用的無線網(wǎng)卡
if (!IntfsTable.dwNumIntfs)
{
RETAILMSG(DBG_MSG, (TEXT("System has no wireless card.\n")));
return FALSE;
}
_tcscpy(pCard, IntfsTable.pIntfs[0].wszGuid);
LocalFree(IntfsTable.pIntfs);
return TRUE;
}

 二、獲取無線網(wǎng)絡(luò)信息

        獲取到了系統(tǒng)可用的無線網(wǎng)卡后,我們就可以利用它的 GUID 號來進(jìn)行進(jìn)一步的操作了,首先要做的事情就是得到該無線網(wǎng)卡的信息以及該無線網(wǎng)卡掃描到的 WIFI 網(wǎng)關(guān)信息。

        以下函數(shù)可以獲取到該無線網(wǎng)卡及掃描的到的無線 AP 信息

//////////////////////////////////////////////////////////////////////////
// pCard: 無線網(wǎng)卡GUID
// pIntf: 無線網(wǎng)卡配置信息結(jié)果體
// pOutFlags: 網(wǎng)卡配置信息掩碼標(biāo)志
//////////////////////////////////////////////////////////////////////////
BOOL GetWirelessCardInfo(PTCHAR pCard, PINTF_ENTRY_EX pIntf, PDWORD pOutFlags)
{
TCHAR *szWiFiCard = NULL;
// 參數(shù)校驗
if (!pCard || !pIntf || !pOutFlags)
{
RETAILMSG(DBG_MSG, (TEXT("Param Error.\n")));
return FALSE;
}
szWiFiCard = pCard;
*pOutFlags = 0;
// 初始化無線網(wǎng)卡信息
ZeroMemory(pIntf, sizeof(INTF_ENTRY_EX));
// 設(shè)置GUID 號
pIntf->wszGuid = szWiFiCard;
// 查詢無線網(wǎng)卡信息
DWORD dwStatus = WZCQueryInterfaceEx(NULL, INTF_ALL, pIntf, pOutFlags);
if (dwStatus != ERROR_SUCCESS)
{
RETAILMSG(DBG_MSG, (TEXT("WZCQueryInterfaceEx() error 0x%08X\n"), dwStatus));
return FALSE;
}
return TRUE;
}

三、判斷連接狀態(tài)

        我們可以通過無線網(wǎng)卡的狀態(tài)來判斷當(dāng)前無線網(wǎng)卡是否已經(jīng)和無線AP建立了連接

BOOL IsAssociated(const INTF_ENTRY_EX Intf, const DWORD dwOutFlags)
{
if (dwOutFlags & INTF_BSSID)
{
PRAW_DATA prdMAC = (PRAW_DATA)(&Intf.rdBSSID);
// 判斷BSSID 的MAC 地址是否有效來判斷是否和無線AP建立了連接
if (prdMAC == NULL || prdMAC->dwDataLen == 0 ||
(!prdMAC->pData[0] && !prdMAC->pData[1] && !prdMAC->pData[2] &
!prdMAC->pData[3] && !prdMAC->pData[4] && !prdMAC->pData[5]))
{
RETAILMSG(DBG_MSG, (TEXT("(This wifi card is not associated to any)\n")));
return FALSE;
}
else
{
RETAILMSG(DBG_MSG, (TEXT("(This wifi card is associated state)\n")));
return TRUE;
}
}
else
{
return FALSE;
}
}

四、獲取無線AP信息

        獲取了無線網(wǎng)卡的信息后,可以通過無線網(wǎng)卡枚舉出當(dāng)前所有可用的無線AP的SSID名稱以及加密模式等等所有可用信息,一下函數(shù)可以實現(xiàn)該功能

void GetWirelseeListSSID(const PRAW_DATA prdBSSIDList, HWND hListCtlWnd)
{
if (prdBSSIDList == NULL || prdBSSIDList->dwDataLen  == 0)
{
RETAILMSG(DBG_MSG, (TEXT("<null> entry.\n")));
}
else
{
PWZC_802_11_CONFIG_LIST pConfigList = (PWZC_802_11_CONFIG_LIST)prdBSSIDList->pData;
//RETAILMSG(DBG_MSG, (TEXT("[%d] entries.\n"), pConfigList->NumberOfItems));
uint 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;
TCHAR tSsid[MAX_PATH];
// 將SSID 的ASCII 碼轉(zhuǎn)化成字符串
PrintSSID(&rdBuffer, tSsid);
if (hListCtlWnd)
{
if (ListBox_FindString(hListCtlWnd, 0, tSsid) == LB_ERR)
{
ListBox_AddString(hListCtlWnd, tSsid);
}
}
//RETAILMSG(DBG_MSG, (TEXT("\n")));
}
}
}

五、連接到指定的無線AP

//////////////////////////////////////////////////////////////////////////
// pCard: 無線網(wǎng)卡GUID
// pSSID: 無線AP SSID號
// bAdhoc: 是否點(diǎn)對點(diǎn)的WIFI 連接
// ulPrivacy: 加密模式(WEP/WPA....)
// ndisMode: 認(rèn)證模式(Open/Share)
// iKeyIndex: 密鑰索引(1-4)
// pKey: 密碼
// iEapType: 802.11 認(rèn)證模式
//////////////////////////////////////////////////////////////////////////
BOOL WirelessConnect(PTCHAR pCard, PTCHAR pSSID, BOOL bAdhoc, ULONG ulPrivacy, NDIS_802_11_AUTHENTICATION_MODE ndisMode, int iKeyIndex, PTCHAR pKey, int iEapType)
{
BOOL bRet = FALSE;
if (!pSSID)
{
RETAILMSG(DBG_MSG, (TEXT("Param Error.\n")));
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];
}
if (bAdhoc)
{
wzcConfig.InfrastructureMode = Ndis802_11IBSS;
}
else
{
wzcConfig.InfrastructureMode = Ndis802_11Infrastructure;
}
wzcConfig.AuthenticationMode = ndisMode;
wzcConfig.Privacy = ulPrivacy;
if (pKey == NULL || _tcslen(pKey) == 0)
{
// 對密鑰進(jìn)行轉(zhuǎn)換
bRet = InterpretEncryptionKeyValue(wzcConfig, 0, NULL, TRUE);
wzcConfig.EapolParams.dwEapType = iEapType;
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;
}

六、密鑰轉(zhuǎn)換

        輸入的密鑰需要通過加密方式進(jìn)行一定的轉(zhuǎn)化,以下函數(shù)可以完成改功能

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];
}
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;
}

      通過以上操作,完全可以連接到可用的無線AP了,再加上些適當(dāng)?shù)腢I程序,完全可以用來替代 Windows CE 自帶的無線配置程序了,我再連接中放置了一個簡單的而完整的測試程序,相信大家看了以后都知道怎么操作無線網(wǎng)卡了

http://download.csdn.net/source/927575

posted on 2010-12-16 09:31 wrh 閱讀(1668) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美裸体一区二区三区| 亚洲精品日韩综合观看成人91| 欧美人与性禽动交情品 | 亚洲欧美日韩在线观看a三区| 日韩小视频在线观看| 夜夜夜久久久| 欧美一级视频免费在线观看| 欧美专区日韩专区| 乱码第一页成人| 欧美日韩国内| 国产亚洲一二三区| 亚洲激情网站免费观看| 中国av一区| 久久精品国产一区二区三| 欧美+日本+国产+在线a∨观看| 亚洲国产精品免费| 中文成人激情娱乐网| 欧美在线观看一区二区| 欧美sm视频| 国产精品激情| 亚洲国产成人不卡| 亚洲欧美日韩国产成人精品影院 | 亚洲精品少妇30p| 亚洲网站啪啪| 美女视频网站黄色亚洲| 国产九色精品成人porny| 亚洲高清自拍| 欧美一区三区二区在线观看| 亚洲片国产一区一级在线观看| 亚洲欧美视频在线观看视频| 欧美精品福利| 亚洲第一在线| 久久精品一区四区| 在线午夜精品自拍| 免播放器亚洲一区| 国产伊人精品| 欧美一区二区三区在线观看视频| 亚洲欧洲日韩女同| 久久综合给合久久狠狠色 | 99精品福利视频| 久久精品在线播放| 国产精品亚洲一区二区三区在线| 亚洲精品乱码久久久久久日本蜜臀 | 欧美欧美午夜aⅴ在线观看| 国产一区二区毛片| 性欧美精品高清| 在线视频精品一| 欧美日韩免费观看一区=区三区| 一区视频在线| 欧美日韩在线不卡| 欧美人与性动交cc0o| 亚洲国产99精品国自产| 久久久欧美精品| 欧美伊久线香蕉线新在线| 欧美吻胸吃奶大尺度电影| 亚洲精品欧洲| 亚洲高清在线| 欧美激情精品久久久久久免费印度| 一区二区在线视频观看| 久久久久久91香蕉国产| 欧美一区二区三区四区在线观看| 国产欧美一区二区精品仙草咪 | 久久久久久久久伊人| 国产人成精品一区二区三| 香蕉久久国产| 欧美在线观看视频一区二区| 国产日韩欧美综合| 久久人人97超碰精品888| 欧美诱惑福利视频| 亚洲高清视频中文字幕| 亚洲电影av| 欧美日韩国产小视频在线观看| 在线视频日韩精品| 亚洲欧美日韩在线播放| 激情久久综合| 亚洲国产精品va在线看黑人动漫| 免费成人黄色片| 一区二区日本视频| 亚洲影院色在线观看免费| 国产欧美日韩三区| 欧美国产精品中文字幕| 欧美人与禽猛交乱配| 亚洲综合色在线| 久久精品123| 一区二区成人精品| 午夜精品区一区二区三| 亚洲高清一区二区三区| 亚洲精一区二区三区| 国产精品影视天天线| 欧美成人精品| 国产精品推荐精品| 亚洲国产成人精品久久| 国产精品亚洲综合| 最新中文字幕亚洲| 国产在线精品成人一区二区三区 | 亚洲美女黄色| 国内欧美视频一区二区| 亚洲人成人77777线观看| 国产视频精品va久久久久久| 亚洲国产精品传媒在线观看 | 亚洲人体一区| 欧美日韩中文在线| 性做久久久久久免费观看欧美| 久久精品视频播放| 亚洲一本大道在线| 久热综合在线亚洲精品| 亚洲欧美日韩国产综合| 欧美ed2k| 久久亚洲精品中文字幕冲田杏梨| 欧美精品在线一区| 裸体一区二区三区| 国产视频亚洲精品| 亚洲色图制服丝袜| 夜夜夜久久久| 欧美成va人片在线观看| 久久久久亚洲综合| 国产精品美女一区二区在线观看| 欧美电影资源| 在线观看91精品国产麻豆| 亚洲欧美日韩一区二区三区在线观看 | 亚洲电影在线| 韩日欧美一区| 午夜精品在线看| 亚洲欧美国产另类| 欧美精品久久99| 欧美a级大片| 激情综合在线| 欧美伊人久久大香线蕉综合69| 亚洲一区影院| 国产精品爱啪在线线免费观看| 亚洲精品免费在线播放| 亚洲精品国产系列| 欧美电影在线播放| 亚洲精品韩国| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲视频在线观看免费| 中文网丁香综合网| 欧美日韩国产精品专区| 亚洲第一视频网站| 亚洲缚视频在线观看| 老司机免费视频久久| 免费看亚洲片| 亚洲国产精品一区二区www在线| 性欧美在线看片a免费观看| 午夜伦欧美伦电影理论片| 国产精品久久久久久超碰| 亚洲专区一区| 久久国产精彩视频| 国产在线精品一区二区夜色| 欧美在线一区二区| 免费日韩成人| 亚洲人体偷拍| 欧美日韩午夜精品| 一区二区三区久久精品| 亚洲男人的天堂在线| 亚洲欧美国产va在线影院| 午夜一区二区三视频在线观看| 性欧美18~19sex高清播放| 国产伦精品一区二区三区在线观看 | 欧美亚洲视频在线看网址| 欧美在线免费一级片| 黄色亚洲网站| 欧美韩日高清| 亚洲欧美国产日韩中文字幕| 久久综合影视| 日韩一二在线观看| 欧美午夜久久| 久久精品视频播放| 亚洲精品之草原avav久久| 亚洲欧美中文日韩v在线观看| 国产色婷婷国产综合在线理论片a| 久久九九热免费视频| 亚洲啪啪91| 亚洲免费高清| 狠狠久久婷婷| 欧美日韩另类一区| 欧美一区二区高清| 最新国产乱人伦偷精品免费网站| 亚洲桃色在线一区| 在线观看亚洲视频| 国产精品久久国产三级国电话系列| 久久成人精品视频| av成人手机在线| 欧美国产精品日韩| 久久亚洲国产精品日日av夜夜| 亚洲精品欧美精品| 国产一区二区欧美| 欧美视频一二三区| 免费久久99精品国产| 欧美一区二区三区成人| 91久久中文字幕| 六月天综合网| 欧美一区二区三区在线观看视频 | 麻豆精品在线播放| 亚洲欧美韩国| 99国内精品| 亚洲另类自拍| 在线看一区二区| 国内精品美女av在线播放| 欧美性猛交一区二区三区精品|