📄 hidden.c
字号:
sizeof(NDIS_802_11_MAC_ADDRESS));
// add SSID, supported rates, and wpa IE info associate request
{
//UCHAR tmpBuf[500];
ULONG ulReqIELen = 0;
ULONG ulCurOffset = 0;
UCHAR ucElemID;
UCHAR ucElemLen;
PUCHAR pIEBuf, pRequestIEBuf;
pIEBuf = pBSSIDIEListSrc[Adapter->ulAttemptedBSSIDIndex].VariableIE;
pRequestIEBuf = Adapter->AssocInfoBuffer + pAdapterAssoInfo->OffsetRequestIEs;
DBGPRINT( DBG_WPA, ("Variable IE Length is %d\n",
pBSSIDListSrc[Adapter->ulAttemptedBSSIDIndex].IELength -
MRVL_FIXED_IE_SIZE));
while ( ulCurOffset < (pBSSIDListSrc[Adapter->ulAttemptedBSSIDIndex].IELength - MRVL_FIXED_IE_SIZE) )
{
ucElemID = *(pIEBuf + ulCurOffset);
ucElemLen = *(pIEBuf + ulCurOffset + 1);
// wpa, supported rate, or wpa
if ( (ucElemID == SSID) ||
(ucElemID == SUPPORTED_RATES) ||
(ucElemID == WPA_IE) ||
(ucElemID == WPA2_IE))
{
// plus ++
if ((ucElemID == WPA2_IE) &&
((Adapter->AuthenticationMode == Ndis802_11AuthModeWPA2) ||
(Adapter->AuthenticationMode == Ndis802_11AuthModeWPA2PSK )))
{
NdisMoveMemory( pRequestIEBuf + ulReqIELen,
&Adapter->wpa2_supplicant.Wpa_ie[0],
Adapter->wpa2_supplicant.Wpa_ie_len);
ulReqIELen += Adapter->wpa2_supplicant.Wpa_ie_len;
}
//plus--
else
{
// copy the IE to association information buffer
NdisMoveMemory( pRequestIEBuf + ulReqIELen,
pIEBuf + ulCurOffset,
ucElemLen + 2 );
ulReqIELen += ( ucElemLen + 2);
}
DBGPRINT(DBG_WPA, ("Copied elemID = 0x%x, %d bytes into request IE\n",
ucElemID, ulReqIELen));
#ifdef PMKID_CACHE_CAP2
if ( ucElemID == WPA2_IE )
{
if ( nPmkidIdx >= 0 )
{
pOriWpa2Ie = pRequestIEBuf + ulReqIELen - ( ucElemLen + 2);
DBGPRINT( DBG_MACEVENT, (" Append PMKID to association buffer\n") );
DBGPRINT( DBG_MACEVENT, (" . Original Len=%d, Current IE=%d, ucElemLen=%d\n", pOriWpa2Ie[1], pOriWpa2Ie[0], ucElemLen ) );
pRequestIEBuf[ulReqIELen] = 1;
pRequestIEBuf[ulReqIELen+1] = 0;
NdisMoveMemory( pRequestIEBuf+ulReqIELen+2,
Adapter->PmkidCache[nPmkidIdx].pmkid, LEN_OF_PMKID);
ulReqIELen += (LEN_OF_PMKID+2);
pOriWpa2Ie[1] += (LEN_OF_PMKID+2);
DBGPRINT( DBG_MACEVENT, (" . New Len=%d, New ReqIeLen=%d\n", pOriWpa2Ie[1], ulReqIELen ) );
HexDump( DBG_MACEVENT, " === Assoc Buffer Dump ===", pRequestIEBuf, ulReqIELen ); //tt
}
}
#endif //PMKID_CACHE_CAP2
HexDump(DBG_WPA, "RequestIE:", pRequestIEBuf, 32);
}
ulCurOffset = ulCurOffset + 2 + ucElemLen;
}
pAdapterAssoInfo->RequestIELength = ulReqIELen;
pAdapterAssoInfo->OffsetResponseIEs = pAdapterAssoInfo->OffsetRequestIEs +
pAdapterAssoInfo->RequestIELength;
}
// completely clean up
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_DEAUTHENTICATE,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
Adapter->CurrentBSSID);
// no longer check because FW does not remember the
{
Adapter->WPAEnabled = TRUE;
// enable WPA
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_ENABLE_RSN,
HostCmd_ACT_SET,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
}
// set authentication mode
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_AUTHENTICATE,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
pBSSIDListSrc[index].MacAddress);
/*
// send down authentication mode
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_RSN_AUTH_SUITES,
HostCmd_ACT_SET,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
*/
}
else
#endif // #ifdef WPA
{
// completely clean up
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_DEAUTHENTICATE,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
Adapter->CurrentBSSID);
// set authentication mode
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_AUTHENTICATE,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
pBSSIDListSrc[index].MacAddress);
}
Adapter->ulTringHiddenAP = index;
Adapter->bIsHiddenTried[index] = TRUE;
Adapter->bIsTryHiddenAP = TRUE;
HexDump(DBG_SCAN,"pAsso dump: ", (PVOID)pAsso,
sizeof(HostCmd_DS_802_11_ASSOCIATE_EXT));
InsertCmdToQueue (Adapter, pTempAsocCmd);
GetCmdFromQueueToExecute(Adapter);
}
VOID
FastHiddenApResponse(
PHostCmd_DS_802_11_ASSOCIATE_RESULT pAssoResult,
PMRVDRV_ADAPTER Adapter)
{
PPENDING_OID pPending;
PNDIS_WLAN_BSSID_EX pBSSIDListSrc;
PMRV_BSSID_IE_LIST pIESrc;
DBGPRINT(DBG_SCAN, (" FastHiddenApResponse()\n"));
Adapter->bIsTryHiddenAP = TRUE;
// Set Bytes read
if (Adapter->CurCmd->BytesRead != NULL)
*(Adapter->CurCmd->BytesRead) = sizeof(NDIS_802_11_SSID);
#ifdef WPA
if ( FW_IS_WPA_ENABLED(Adapter) )
{
// copy the association result info to the ASSOCIATION_INFO buffer
PNDIS_802_11_ASSOCIATION_INFORMATION pInfo;
pInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)Adapter->AssocInfoBuffer;
// only currently copy the fixed IE
// TODO copy the entire IE once it is available!
pInfo->ResponseFixedIEs.Capabilities = pAssoResult->CapInfo;
pInfo->ResponseFixedIEs.StatusCode = pAssoResult->StatusCode;
pInfo->ResponseFixedIEs.AssociationId = pAssoResult->AssociationID;
pInfo->AvailableResponseFixedIEs |= NDIS_802_11_AI_RESFI_CAPABILITIES;
pInfo->AvailableResponseFixedIEs |= NDIS_802_11_AI_RESFI_STATUSCODE;
pInfo->AvailableResponseFixedIEs |= NDIS_802_11_AI_RESFI_ASSOCIATIONID;
//HexDump(DBG_CMDRESP,"AssociationResult", (PUCHAR )pAssoResult, pAssoResult->Size);
// copy the IE after the request IE buffer
pInfo->ResponseIELength = pAssoResult->IELength;
NdisMoveMemory( Adapter->AssocInfoBuffer + pInfo->OffsetResponseIEs,
pAssoResult->IE,
pAssoResult->IELength);
/*
pInfo->ResponseIELength = Adapter->PSBSSIDList[Adapter->ulAttemptedBSSIDIndex].IELength;
NdisMoveMemory( Adapter->AssocInfoBuffer + pInfo->OffsetResponseIEs,
Adapter->PSIEBuffer[Adapter->ulAttemptedBSSIDIndex].VariableIE,
pInfo->ResponseIELength);
*/
DBGPRINT(DBG_CMDRESP, ("*** Association Result IE: CapInfo = 0x%x, "
"StatusCode = 0x%x, AssociationID = 0x%x\n",
pInfo->ResponseFixedIEs.Capabilities,
pInfo->ResponseFixedIEs.StatusCode,
pInfo->ResponseFixedIEs.AssociationId));
}
#endif
if (pAssoResult->StatusCode != 0x0)
{
DBGPRINT(DBG_CMDRESP,("HWAC - Association Failed, code = %d\n",
pAssoResult->StatusCode));
// clear out current association
NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
if (Adapter->MediaConnectStatus == NdisMediaStateConnected)
{
ResetDisconnectStatus(Adapter);
}
// add scan to clean up the old BSSID list in firmware/driver
if (Adapter->bRetryAssociate == TRUE)
{
Adapter->bRetryAssociate = FALSE;
}
if (FindHiddenApToTry(Adapter) ==0xffffffff)
{
// return pending OID_802_11_SET_SSID
pPending = &(Adapter->PendingSetSssidOid);
if (pPending->bIsPendingOID)
{
pPending->bIsPendingOID = FALSE;
*(pPending->BytesReadWrite) = 0;
NdisMSetInformationComplete(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_SUCCESS); ///NDIS_STATUS_FAILURE);
}
Adapter->bIsAssociateInProgress = FALSE;
Adapter->bIsReConnectNow = FALSE;
Adapter->bIsSystemConnectNow = FALSE;
ResetHiddenTryFlag(Adapter);
}
else
{
FastHiddenApAssociate (Adapter);
}
return;
}
Adapter->MediaConnectStatus = NdisMediaStateConnected;
#ifdef MRV_CHIP_8385PN
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_54mbps;
#elif defined(MRV_CHIP_8385H)
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_54mbps;
#else
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_11mbps;
#endif
// indicate the NDIS the media is didconnected
DBGPRINT(DBG_CMDRESP,("HWAC - Indicated association\n"));
NdisMIndicateStatus(Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_CONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
#ifdef MRVL_GUI_INTERFACE
MrvlNotifyApplication(
COMMAND_EVENT_ASSOC_SUCCESS,
NULL,
0);
#endif
if (Adapter->ulPSNumOfBSSIDs == MRVDRV_MAX_BSSID_LIST)
{
NdisMoveMemory( &Adapter->PSBSSIDList[MRVDRV_MAX_BSSID_LIST],
&Adapter->HiddenBSSIDList[Adapter->ulTringHiddenAP],
sizeof(NDIS_WLAN_BSSID_EX));
NdisMoveMemory( &Adapter->PSIEBuffer[MRVDRV_MAX_BSSID_LIST],
&Adapter->HiddenIEBuffer[Adapter->ulTringHiddenAP],
sizeof(MRV_BSSID_IE_LIST));
NdisMoveMemory( &Adapter->PSBssDescList[MRVDRV_MAX_BSSID_LIST],
&Adapter->HiddenBssDescList[Adapter->ulTringHiddenAP],
sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));
}
else
{
NdisMoveMemory( &Adapter->PSBSSIDList[Adapter->ulPSNumOfBSSIDs],
&Adapter->HiddenBSSIDList[Adapter->ulTringHiddenAP],
sizeof(NDIS_WLAN_BSSID_EX));
NdisMoveMemory( &Adapter->PSIEBuffer[Adapter->ulPSNumOfBSSIDs],
&Adapter->HiddenIEBuffer[Adapter->ulTringHiddenAP],
sizeof(MRV_BSSID_IE_LIST));
NdisMoveMemory( &Adapter->PSBssDescList[Adapter->ulPSNumOfBSSIDs],
&Adapter->HiddenBssDescList[Adapter->ulTringHiddenAP],
sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));
Adapter->ulPSNumOfBSSIDs++;
}
pBSSIDListSrc = Adapter->PSBSSIDList;
pIESrc = Adapter->PSIEBuffer;
Adapter->ulCurrentBSSIDIndex = Adapter->ulPSNumOfBSSIDs;
NdisMoveMemory( &Adapter->CurrentBSSIDDesciptor,
&pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex],
sizeof(NDIS_WLAN_BSSID_EX));
NdisMoveMemory( &Adapter->CurrentBSSIDIEBuffer,
&pIESrc[Adapter->ulCurrentBSSIDIndex],
sizeof(MRV_BSSID_IE_LIST));
NdisMoveMemory( &Adapter->CurrentSSID,
&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].Ssid),
sizeof(NDIS_802_11_SSID));
// Set the new BSSID (AP's MAC address) to current BSSID
NdisMoveMemory( Adapter->CurrentBSSID,
&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].MacAddress),
MRVDRV_ETH_ADDR_LEN);
// Make a copy of current BSSID descriptor
NdisMoveMemory( &(Adapter->CurrentBssDesciptor),
&(Adapter->PSBssDescList[Adapter->ulCurrentBSSIDIndex]),
sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));
// Set the new configuration to the current config
NdisMoveMemory( &Adapter->CurrentConfiguration,
&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].Configuration),
sizeof(NDIS_802_11_CONFIGURATION));
#ifdef MRVL_GUI_INTERFACE
MrvlNotifyApplication(
COMMAND_EVENT_ASSOC_SUCCESS,
NULL,
0);
#endif
// Initialize RSSI value to specific number so the first
// RSSI value will be recorded as so without the average
Adapter->LastRSSI = MRVL_DEFAULT_INITIAL_RSSI; // default value
Adapter->usTimeElapsedSinceLastScan = 0;
Adapter->ulTxByteInLastPeriod =
Adapter->ulRxByteInLastPeriod = 0;
// reset awake time stamp
Adapter->ulAwakeTimeStamp = 0;
DBGPRINT(DBG_CMDRESP,("HWAC - Associated\n"));
pPending = &(Adapter->PendingSetSssidOid);
if (pPending->bIsPendingOID)
{
pPending->bIsPendingOID = FALSE;
*(pPending->BytesReadWrite) = 0;
NdisMSetInformationComplete(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_SUCCESS);
}
if ( (Adapter->MediaConnectStatus == NdisMediaStateConnected) &&
!(Adapter->EncryptionStatus == Ndis802_11Encryption2KeyAbsent))
{
if (Adapter->PSMode == Ndis802_11PowerModeMAX_PSP)
PSSleep(Adapter);
}
Adapter->bIsAssociateInProgress = FALSE;
Adapter->bIsReConnectNow = FALSE;
Adapter->bIsSystemConnectNow = FALSE;
ResetHiddenTryFlag(Adapter);
InfraBssReconnectStop(Adapter);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -