PpmUpdatePerfStates

void __fastcall PpmUpdatePerfStates(_DWORD *a1){
  INT64 v2; 
  INT64 v3; 
  char v4; 
  unsigned int v5; 
  unsigned int v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 Domain; 

  PpmAcquireLock((_PPM_LOCK *)((char *)&stru_140C23628 + 1048));
  if( a1[2] )
  {
    v2 = PpmPerfDomainHead;
    v3 = 0i64;
    v4 = 0;
    while( (INT64 *)v2 != &PpmPerfDomainHead )
    {
      v5 = *(_DWORD *)(v2 + 200);
      v6 = 0;
      v3 = v2;
      if( v5 )
      {
        v7 = *(_QWORD *)(v2 + 216);
        while( 1 )
        {
          v8 = 136i64 * v6;
          if( *(_DWORD *)(v8 + v7 + 16) )
          {
            if( *(_DWORD *)(v8 + v7 + 20) == a1[1] )
              break;
          }
          if( ++v6 >= v5 )
            goto LABEL_8;
        }
        v4 = 1;
        break;
      }
LABEL_8:
      v2 = *(_QWORD *)v2;
    }
    Domain = v3 & -(__int64)(v4 != 0);
  }
  else
  {
    Domain = (__int64)KeGetPrcb((unsigned int)a1[1])->PowerState.CheckContext.Domain;
  }
  if( Domain )
  {
    if( *(_DWORD *)(Domain + 320) == *a1 )
    {
      PpmReleaseLock((INT64 *)&stru_140C23628 + 131);
    }
    else
    {
      *(_DWORD *)(Domain + 320) = *a1;
      PpmPerfUpdateDomainPolicy(1);
    }
    if( (unsigned int)PpmPerfDomainCount > 1 )
    {
      PpmAcquireLock((_PPM_LOCK *)((char *)&stru_140C23628 + 1048));
      PpmReinitializeHeteroEngine(1);
    }
  }
}

Referenced by:

No references.