PpmHeteroRestrictToFavoredClass

UINT64 __stdcall PpmHeteroRestrictToFavoredClass(UINT64 Candidates){
  unsigned __int16 v1; 
  unsigned __int8 v2; 
  int v3; 
  UINT64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 i; 
  unsigned __int64 v7; 
  _KPRCB *Prcb; 
  unsigned __int8 PerformanceSchedulingClass; 
  unsigned __int64 v10; 
  _KPRCB *v11; 
  unsigned __int64 GroupSetMember; 

  v2 = 0;
  v3 = v1;
  v4 = 0i64;
  v5 = Candidates;
  for( i = Candidates; i; i &= ~Prcb->GroupSetMember )
  {
    _BitScanForward64(&v7, i);
    Prcb = KeGetPrcb((unsigned int)KiProcessorNumberToIndexMappingTable[64 * v3 + (v7 & 0x3F)]);
    PerformanceSchedulingClass = v2;
    if( v2 <= Prcb->PowerState.PerformanceSchedulingClass )
      PerformanceSchedulingClass = Prcb->PowerState.PerformanceSchedulingClass;
    v2 = PerformanceSchedulingClass;
  }
  for( ; v5; v5 &= ~GroupSetMember )
  {
    _BitScanForward64(&v10, v5);
    v11 = KeGetPrcb((unsigned int)KiProcessorNumberToIndexMappingTable[64 * v3 + (v10 & 0x3F)]);
    GroupSetMember = v11->GroupSetMember;
    if( v11->PowerState.PerformanceSchedulingClass == v2 )
      v4 |= GroupSetMember;
  }
  return v4;
}

Referenced by:

PpmParkComputeUnparkMask