⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oidproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
        }

        size = (((sizeof(NDIS_WLAN_BSSID_EX) + 
                pBSSIDList[idx].IELength) + 3) >> 2) << 2;
        
        // HexDump(DBG_SCAN, "NDIS_WLAN_BSSID_EX:", (PUCHAR)pPrevBuf, size);


        /*DBGPRINT(DBG_SCAN, ("bssidlist size = %d, sizeof ex structure = "
                            "%d, ielength = %d, size of orig "
                            "structure = %d\n",
                            size, sizeof(NDIS_WLAN_BSSID_EX), 
                            pBSSIDList[idx].IELength,
                            sizeof(NDIS_WLAN_BSSID)));*/

        DBGPRINT(DBG_SCAN, ("Copied SSID %s, %2x-%2x-%2x-%2x-%2x-%2x\n", 
                           pBSSIDList[idx].Ssid.Ssid,
                           pBSSIDList[idx].MacAddress[0],
                           pBSSIDList[idx].MacAddress[1],
                           pBSSIDList[idx].MacAddress[2],
                           pBSSIDList[idx].MacAddress[3],
                           pBSSIDList[idx].MacAddress[4],
                           pBSSIDList[idx].MacAddress[5]));

        // move the pointers
        pCurBuf = pPrevBuf + size;
        ulActualWriteSize += size;
        pPrevBuf = pCurBuf;
    }

  *BytesWritten = ulActualWriteSize;
  *BytesNeeded = 0;
  return (Status);
}

#ifdef WPA
/******************************************************************************
 *
 *  Name: MrvDrvSetEncryptionStatus()
 *
 *  Description: process set encryption status OID
 *
 *  Arguments:
 *    IN PMRVDRV_ADAPTER          Adapter
 *      IN NDIS_802_11_ENCRYPTION_STATUS  EncryptionStatus
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_NOT_SUPPORTED
 * 
 *  Notes: 
 *    Due to the new OID operation mechanism, this function can only be called from
 *    MrvDrvSetInformation(). TT noted.
 *
 *****************************************************************************/
NDIS_STATUS 
MrvDrvSetEncryptionStatus(
  IN PMRVDRV_ADAPTER          Adapter,
  IN NDIS_802_11_ENCRYPTION_STATUS  EncryptionStatus,
    IN NDIS_OID Oid,
  IN PVOID InformationBuffer,
  OUT PULONG BytesRead,
  OUT PULONG BytesNeeded
)
{
    NDIS_STATUS     Status;
    USHORT          Action;
    NDIS_802_11_ENCRYPTION_STATUS   PrevEncryptionStatus;

    PrevEncryptionStatus = Adapter->EncryptionStatus;

  switch (EncryptionStatus) 
  {

  case Ndis802_11Encryption3Enabled:
   //dralee 081005, V4 
   //return NDIS_STATUS_NOT_SUPPORTED;

  case Ndis802_11Encryption3KeyAbsent:  
  case Ndis802_11Encryption2Enabled:
  case Ndis802_11Encryption2KeyAbsent:
        if ( ! FW_IS_WPA_ENABLED(Adapter) )
        {
            return NDIS_STATUS_NOT_SUPPORTED;
        }

        if ( (Adapter->MediaConnectStatus == NdisMediaStateConnected) &&
           //dralee 081005, V4 
           //(PrevEncryptionStatus != Ndis802_11Encryption2Enabled) )
             ((PrevEncryptionStatus != Ndis802_11Encryption2Enabled) &&
              (PrevEncryptionStatus != Ndis802_11Encryption3Enabled) ) 
           )
        {
            USHORT usCommand;

            // Adapter is connected and there is a mode change
            // Disconnect first
           

            if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
            {
                usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
            }
            else
            {
                usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
            }

            // completely clean up
            Status=PrepareAndSendCommand(
                      Adapter,
                      usCommand,
                      0,
                      HostCmd_OPTION_USE_INT,
                      Oid,
                      HostCmd_PENDING_ON_NONE,
                      0,
                      FALSE,
                      NULL,
                      NULL,
                      NULL,
                      NULL);
         ResetDisconnectStatus(Adapter);        
        }
 


        if ( (PrevEncryptionStatus == Ndis802_11Encryption1Enabled) || 
             (PrevEncryptionStatus == Ndis802_11Encryption1KeyAbsent) )
        {
            // disable WEP
    /* dralee 081005, V4
      Adapter->usMacControlRecord |=
                                    ( HostCmd_ACT_MAC_RX_ON | 
                            HostCmd_ACT_MAC_TX_ON |
                            HostCmd_ACT_MAC_INT_ENABLE);
       Adapter->usMacControlRecord &=
                                      ~HostCmd_STATUS_MAC_WEP_ENABLE;    
    */
      Action = HostCmd_STATUS_MAC_RX_ON | 
           HostCmd_STATUS_MAC_TX_ON |
           HostCmd_STATUS_MAC_INT_ENABLE;

      Status=PrepareAndSendCommand(
                Adapter,
                HostCmd_CMD_MAC_CONTROL,
                //Adapter->usMacControlRecord,
                  Action,
                HostCmd_OPTION_USE_INT,
                Oid,
                HostCmd_PENDING_ON_NONE,
                0,
                FALSE,
                NULL,
                BytesRead,
                BytesNeeded,
                InformationBuffer);
        }
        #ifdef  REASSOCIATE
              if ((Adapter->bIsReconnectEnable == TRUE) || 
            (Adapter->bIsBeaconLoseEvent == TRUE) || 
            (Adapter->bIsDeauthenticationEvent == TRUE)
            #ifdef ACTIVE_ROAMING
	      ||(Adapter->bIsActiveRoaming== TRUE)
	     #endif
            )
         {
                     Adapter->EncryptionStatus = EncryptionStatus;
         }
                else
        #endif 
                {
                   
                // tt broadcom mix mode ++
                if(EncryptionStatus==Ndis802_11Encryption3Enabled||EncryptionStatus==Ndis802_11Encryption3KeyAbsent)
                          Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
             else       
                          Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
              // tt broadcom mix mode --
                            
                }

        // plus added (for WEP -> WPA-PSK TKIP)
        Adapter->WEPStatus = Ndis802_11WEPDisabled;

        // Enabling FW WPA will occur just right before association 
        // command is sent down
        
        Status = NDIS_STATUS_SUCCESS;
    break;

    case Ndis802_11Encryption1Enabled:
    case Ndis802_11Encryption1KeyAbsent:

        Adapter->WPAEnabled = FALSE;

        // disable RSN if previous status is 2 or 3
        if ( (PrevEncryptionStatus == Ndis802_11Encryption2Enabled) ||
             (PrevEncryptionStatus == Ndis802_11Encryption3Enabled) ||
             (PrevEncryptionStatus == Ndis802_11Encryption2KeyAbsent) ||
             (PrevEncryptionStatus == Ndis802_11Encryption3KeyAbsent))
        {
            // check if it is necessary to disconnect
        
            if ( Adapter->MediaConnectStatus == NdisMediaStateConnected )
            {
                USHORT  usCommand;

                // Adapter is connected and there is a mode change
                // Disconnect first

                if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
                {
                    usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
                }
                else
                {
                    usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
                }

                // completely clean up
                Status=PrepareAndSendCommand(
                          Adapter,
                          usCommand,
                          0,
                          HostCmd_OPTION_USE_INT,
                          Oid,
                          HostCmd_PENDING_ON_NONE,
                          0,
                          FALSE,
                          NULL,
                          NULL,
                          NULL,
                          NULL);
           ResetDisconnectStatus(Adapter);      
            }


            Status = PrepareAndSendCommand(
                  Adapter,
                  HostCmd_CMD_802_11_ENABLE_RSN,
                  HostCmd_ACT_SET,
                  HostCmd_OPTION_USE_INT,
                  Oid,
                  HostCmd_PENDING_ON_NONE,
                  0,
                  FALSE,
                  NULL,
                  BytesRead,
                  BytesNeeded,
                  InformationBuffer);
        }

        Adapter->EncryptionStatus = Ndis802_11Encryption1Enabled;
        Adapter->WEPStatus = Ndis802_11WEPEnabled;
        
        // Enable WEP
        // TODO: May need to check for previous status, not sure
        //       if OS disable WPA first if WPA is used in previous association
   /* dralee 081005, V4
 Adapter->usMacControlRecord |= 
                   (HostCmd_ACT_MAC_RX_ON | 
                  HostCmd_ACT_MAC_TX_ON |
                HostCmd_ACT_MAC_WEP_ENABLE |
                HostCmd_ACT_MAC_INT_ENABLE);
    */
    Action = HostCmd_STATUS_MAC_RX_ON | 
           HostCmd_STATUS_MAC_TX_ON |
         HostCmd_STATUS_MAC_WEP_ENABLE |
         HostCmd_STATUS_MAC_INT_ENABLE;

      //BugFix
      if(Adapter->LastAddedWEPKey.KeyLength==13)
    {
             //WEP 128bit
             Action = Action |HostCmd_ACT_MAC_WEP_TYPE;
       DBGPRINT(DBG_DEBUGUSE,("MrvDrvSetEncryptionStatus: SetCMD 0x28 WEP 128bit\n"));
    }else
        {
            
             //WEP 64bit
              Action = Action&(~HostCmd_ACT_MAC_WEP_TYPE);
          DBGPRINT(DBG_DEBUGUSE,("MrvDrvSetEncryptionStatus: SetCMD 0x28 WEP 64bit\n"));
    }

    Status=PrepareAndSendCommand(
      Adapter,
      HostCmd_CMD_MAC_CONTROL,
            //Adapter->usMacControlRecord, //dralee 081005, V4
            Action,
      HostCmd_OPTION_USE_INT,
      Oid,
      HostCmd_PENDING_ON_SET_OID,
      0,
      FALSE,
      NULL,
      BytesRead,
      BytesNeeded,
      InformationBuffer);

    if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES) 
        {     
      // return Status;
    }
    else 
        {
      Status = NDIS_STATUS_PENDING; 
    }

    break;

  case Ndis802_11EncryptionDisabled:

        Adapter->WPAEnabled = FALSE;

        switch ( Adapter->EncryptionStatus )
        {
        case Ndis802_11Encryption3Enabled:
        case Ndis802_11Encryption2Enabled:
        case Ndis802_11Encryption2KeyAbsent:
        case Ndis802_11Encryption3KeyAbsent:

            // disable TKIP/WPA
            Status = PrepareAndSendCommand(
                  Adapter,
                  HostCmd_CMD_802_11_ENABLE_RSN,
                  HostCmd_ACT_SET,
                  HostCmd_OPTION_USE_INT,
                  Oid,
                  HostCmd_PENDING_ON_SET_OID,
                  0,
                  FALSE,
                  NULL,
                  BytesRead,
                  BytesNeeded,
                  InformationBuffer);

            if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES) 
            {     
          //return Status;
        }
        else 
            {
          Status =  NDIS_STATUS_PENDING; 
        }

            break;

        case Ndis802_11Encryption1Enabled:
        case Ndis802_11Encryption1KeyAbsent:

            // disable WEP
      /* dralee 081005, V4
  Adapter->usMacControlRecord |=
                                    ( HostCmd_ACT_MAC_RX_ON | 
             HostCmd_ACT_MAC_TX_ON |
             HostCmd_ACT_MAC_INT_ENABLE);
       Adapter->usMacControlRecord &=
                                      ~HostCmd_STATUS_MAC_WEP_ENABLE; 
   */
      Action = HostCmd_STATUS_MAC_RX_ON | 
           HostCmd_STATUS_MAC_TX_ON |
           HostCmd_STATUS_MAC_INT_ENABLE;

      Status=PrepareAndSendCommand(
                Adapter,
                HostCmd_CMD_MAC_CONTROL,
                //Adapter->usMacControlRecord, //dralee 081005, V4
                  Action,
                HostCmd_OPTION_USE_INT,
                Oid,
                HostCmd_PENDING_ON_SET_OID,
                0,
                FALSE,
                NULL,
                BytesRead,
                BytesNeeded,
                InformationBuffer);

      if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES) 
            {       
        //return Status;
      }
      else 
            {     
        Status = NDIS_STATUS_PENDING; 
      }

            break;

        default:
            // do nothing
            Status = NDIS_STATUS_SUCCESS;
            break;
        } //switch ( Adapter->EncryptionStatus )
        Adapter->EncryptionStatus = Ndis802_11EncryptionDisabled;
        Adapter->WEPStatus = Ndis802_11WEPDisabled;

    break; //case Ndis802_11EncryptionDisabled:

  default:

    DBGPRINT(DBG_OID | DBG_WPA, ("Not supported EncryptionStatus: %d\n", 
                                        EncryptionStatus));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -