PpmParkDistributeUtility

NTSTATUS __stdcall PpmParkDistributeUtility(){
  unsigned __int64 v0; 
  __int64 v1; 
  int CurrentIndex; 
  unsigned __int8 v3; 
  unsigned int v4; 
  unsigned __int16 v5; 
  unsigned __int8 v6; 
  unsigned __int8 v7; 
  char v8; 
  char v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 CurrentMask; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned int v15; 
  int v16; 
  int v17; 
  unsigned int v18; 
  unsigned int v19; 
  int v20; 
  int v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  __int64 v24; 
  unsigned int v25; 
  unsigned int v26; 
  unsigned int v27; 
  unsigned int v28; 
  int v29; 
  unsigned __int64 v30; 
  __int64 v31; 
  unsigned int v32; 
  int v33; 
  NTSTATUS result; 
  _KPRCB *Prcb; 
  UINT64 v36; 
  unsigned __int8 v37; 
  int v38; 
  _KPRCB *v39; 
  unsigned int v40; 
  __int64 v41; 
  unsigned int v42; 
  unsigned int v43; 
  unsigned int v44; 
  _KPRCB *v45; 
  unsigned int Utility; 
  _KPRCB *v47; 
  UINT64 ProcIndex; 
  unsigned __int64 v49; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  unsigned __int64 v51; 
  unsigned __int64 v52; 
  unsigned __int16 v53; 
  char v54; 
  char v55; 
  unsigned int v56; 
  int v57; 
  _DWORD *v58; 

  v53 = CurrentIndex;
  v52 = v0;
  v4 = v56;
  v5 = CurrentIndex;
  Context.CurrentIndex = CurrentIndex;
  *(_DWORD *)(&Context.CurrentIndex + 1) = 0;
  v6 = v3;
  *(&Context.CurrentIndex + 3) = 0;
  v7 = 0;
  LODWORD(ProcIndex) = 0;
  v8 = 0;
  v51 = v0 ^ v1;
  v9 = 0;
  v57 = (unsigned __int16)CurrentIndex;
  v10 = 0i64;
  Context.Affinity = 0i64;
  v11 = v0 ^ v1;
  CurrentMask = v0 ^ v1;
  CurrentIndex = (unsigned __int16)CurrentIndex;
  while( CurrentMask )
  {
LABEL_3:
    CurrentIndex = Context.CurrentIndex;
    _BitScanForward64(&v13, CurrentMask);
    Context.CurrentMask = CurrentMask & ~(1i64 << v13);
    LODWORD(ProcIndex) = KiProcessorNumberToIndexMappingTable[64 * Context.CurrentIndex + (unsigned __int8)v13];
    if( (unsigned int)ProcIndex >= (unsigned int)KeNumberProcessors_0 )
      v14 = 0i64;
    else
      v14 = (__int64)*(&KiProcessorBlock + (unsigned int)ProcIndex);
    if( *(_BYTE *)(v14 + 33208) )
    {
      ++v9;
      v10 |= *(_QWORD *)(v14 + 200);
    }
    else
    {
      ++v8;
    }
    v15 = *(_DWORD *)(v14 + 33168);
    if( PpmHeteroImplementationGeneration )
    {
      v16 = *(_DWORD *)(v14 + 33184);
      if( v16 )
        v15 = (v16 * v15) >> 16;
    }
    CurrentMask = Context.CurrentMask;
    ++v7;
    v4 += v15;
  }
  while( ++Context.CurrentIndex < (unsigned int)(CurrentIndex + 1) )
  {
    Context.CurrentMask = *(_QWORD *)(8i64 * Context.CurrentIndex + 8);
    CurrentMask = Context.CurrentMask;
    if( Context.CurrentMask )
      goto LABEL_3;
  }
  Context.CurrentMask = v52;
  v49 = v10;
  v54 = v9;
  Context.CurrentIndex = v5;
  while( 1 )
  {
    KeEnumerateNextProcessor(&ProcIndex, &Context);
    if( v17 )
      break;
    Prcb = KeGetPrcb((unsigned int)ProcIndex);
    v36 = Prcb->PowerState.CheckContext.Utility - Prcb->PowerState.CheckContext.AffinitizedUtility;
    if( PpmHeteroImplementationGeneration )
      LODWORD(v36) = PpmHeteroUtilityToNormalizedUtility((INT64)&Prcb->PowerState.CheckContext, v36);
    v4 += v36;
  }
  if( v7 <= 1u )
    v7 = 1;
  if( v6 >= v7 )
    v6 = v7;
  if( v6 <= 1u )
    v6 = 1;
  v18 = v4 / v7;
  v19 = v4 / v6;
  if( v8 )
  {
    v20 = 0;
    if( v54 )
    {
      Context.CurrentIndex = v53;
      Context.CurrentMask = v49;
      Context.Affinity = 0i64;
      while( 1 )
      {
        v37 = v6;
        KeEnumerateNextProcessor(&ProcIndex, &Context);
        if( v38 )
          break;
        v39 = KeGetPrcb((unsigned int)ProcIndex);
        v11 ^= v39->GroupSetMember;
        v40 = PpmHeteroNormalizedUtilityToUtility((INT64)&v39->PowerState.CheckContext, v19);
        v42 = v40;
        if( v40 <= *(_DWORD *)(v41 + 40) )
        {
          if( v55 )
          {
            v43 = *(_DWORD *)(v41 + 44);
            if( v43 <= v42 )
              v43 = v42;
            *(_DWORD *)(v41 + 40) = v43;
          }
        }
        else
        {
          *(_DWORD *)(v41 + 40) = v40;
        }
        --v6;
        if( !v37 )
          v6 = 0;
      }
    }
  }
  else
  {
    v20 = 0;
  }
  v21 = v57;
  v22 = v11;
  Context.CurrentIndex = v53;
  while( v22 )
  {
LABEL_24:
    v21 = Context.CurrentIndex;
    _BitScanForward64(&v23, v22);
    Context.CurrentMask = v22 & ~(1i64 << v23);
    LODWORD(ProcIndex) = KiProcessorNumberToIndexMappingTable[64 * Context.CurrentIndex + (unsigned __int8)v23];
    if( (unsigned int)ProcIndex >= (unsigned int)KeNumberProcessors_0 )
      v24 = 0i64;
    else
      v24 = (__int64)*(&KiProcessorBlock + (unsigned int)ProcIndex);
    v25 = *(_DWORD *)(v24 + 33184);
    v26 = *(_DWORD *)(v24 + 33168);
    if( v25 )
      v27 = (v26 * v25) >> 16;
    else
      v27 = *(_DWORD *)(v24 + 33168);
    if( v18 <= v27 )
    {
      v11 ^= *(_QWORD *)(v24 + 200);
      v28 = v19;
      if( v25 )
      {
        if( v25 == 0x10000 )
          v28 = (unsigned __int16)v19;
        else
          v28 = (v19 << 16) / v25;
      }
      if( v28 <= v26 )
      {
        if( !v55 )
          goto LABEL_29;
        v44 = *(_DWORD *)(v24 + 33172);
        v22 = Context.CurrentMask;
        if( v44 <= v28 )
          v44 = v28;
        *(_DWORD *)(v24 + 33168) = v44;
      }
      else
      {
        v22 = Context.CurrentMask;
        *(_DWORD *)(v24 + 33168) = v28;
      }
    }
    else
    {
LABEL_29:
      v22 = Context.CurrentMask;
    }
  }
  while( ++Context.CurrentIndex < (unsigned int)(v21 + 1) )
  {
    Context.CurrentMask = *(_QWORD *)(8i64 * Context.CurrentIndex + 8);
    v22 = Context.CurrentMask;
    if( Context.CurrentMask )
      goto LABEL_24;
  }
  v29 = v57;
  Context.CurrentIndex = v53;
  Context.Affinity = 0i64;
  while( v11 )
  {
LABEL_38:
    v29 = Context.CurrentIndex;
    _BitScanForward64(&v30, v11);
    Context.CurrentMask = v11 & ~(1i64 << v30);
    LODWORD(ProcIndex) = KiProcessorNumberToIndexMappingTable[64 * Context.CurrentIndex + (unsigned __int8)v30];
    if( (unsigned int)ProcIndex >= (unsigned int)KeNumberProcessors_0 )
      v31 = 0i64;
    else
      v31 = (__int64)*(&KiProcessorBlock + (unsigned int)ProcIndex);
    v32 = *(_DWORD *)(v31 + 33184);
    v33 = v18;
    if( v32 )
    {
      if( v32 == 0x10000 )
        v33 = (unsigned __int16)v18;
      else
        v33 = (v18 << 16) / v32;
    }
    v11 = Context.CurrentMask;
    *(_DWORD *)(v31 + 33168) = v33;
  }
  while( 1 )
  {
    result = Context.CurrentIndex;
    LOWORD(result) = ++Context.CurrentIndex;
    if( Context.CurrentIndex >= (unsigned int)(v29 + 1) )
      break;
    Context.CurrentMask = *(_QWORD *)(8i64 * Context.CurrentIndex + 8);
    v11 = Context.CurrentMask;
    if( Context.CurrentMask )
      goto LABEL_38;
  }
  if( v58 )
  {
    Context.CurrentMask = v51;
    Context.Affinity = 0i64;
    Context.CurrentIndex = v53;
    while( 1 )
    {
      KeEnumerateNextProcessor(&ProcIndex, &Context);
      if( result )
        break;
      v45 = KeGetPrcb((unsigned int)ProcIndex);
      Utility = v45->PowerState.CheckContext.Utility;
      if( Utility > 0x2710 )
        v20 += PpmHeteroUtilityToNormalizedUtility((INT64)&v45->PowerState.CheckContext, Utility - 10000);
    }
    *v58 = v20;
  }
  if( v55 )
  {
    Context.CurrentMask = v52;
    Context.CurrentIndex = v53;
    Context.Affinity = 0i64;
    while( 1 )
    {
      KeEnumerateNextProcessor(&ProcIndex, &Context);
      if( result )
        break;
      v47 = KeGetPrcb((unsigned int)ProcIndex);
      v47->PowerState.CheckContext.Utility = v47->PowerState.CheckContext.AffinitizedUtility;
    }
  }
  return result;
}

Referenced by:

PpmHeteroDistributeUtility
PpmParkDistributeAllUtility