PpmParkReportParkedCores

UINT8 __stdcall PpmParkReportParkedCores(){
  NTSTATUS v1; 
  NTSTATUS v2; 
  NTSTATUS v3; 
  int v4; 
  _KPRCB *Prcb; 
  int v6; 
  _KPRCB *v7; 
  UINT64 ProcIndex; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  UINT16 v10[88]; 
  _KAFFINITY_EX Result; 
  _KAFFINITY_EX Affinity2; 

  *(_DWORD *)(&Context.CurrentIndex + 1) = 0;
  *(&Context.CurrentIndex + 3) = 0;
  LODWORD(ProcIndex) = 0;
  memset(&Result, 0i64, sizeof(Result));
  memset(&Affinity2, 0i64, sizeof(Affinity2));
  memset(v10, 0i64, 0xA8u);
  if( !PpmIsParkingEnabled )
    return 1;
  v1 = KeAndAffinityEx(&PpmPerfChangedCoreParkingMask.Count, &PpmPerfNewCoreParkingMask.Count, (INT8 *)&Result);
  KeSubtractAffinityEx(&PpmPerfNewCoreParkingMask.Count, (INT8 *)&PpmPerfChangedCoreParkingMask, (INT8 *)&Affinity2);
  KeXorAffinityEx(&PpmParkSoftParkingMask, &PpmParkNewSoftParkingMask, v10);
  if( !(v1 | KeAndAffinityEx(v10, &Affinity2.Count, (INT8 *)v10)) )
    return 1;
  v2 = KeCountSetBitsAffinityEx(v10);
  v3 = KeCountSetBitsAffinityEx(&Result.Count);
  Context.CurrentIndex = 0;
  Context.CurrentMask = Result.Bitmap[0];
  Context.Affinity = &Result;
  *(&PopIrpWorkerControlEvent + 316) = v3 + v2;
  while( 1 )
  {
    KeEnumerateNextProcessor(&ProcIndex, &Context);
    if( v4 )
      break;
    Prcb = KeGetPrcb((unsigned int)ProcIndex);
    PpmPerfQueueAction(Prcb, PpmPerfActionReportParkedCore);
  }
  Context.CurrentMask = *(_QWORD *)&v10[4];
  Context.Affinity = (_KAFFINITY_EX *)v10;
  Context.CurrentIndex = 0;
  while( 1 )
  {
    KeEnumerateNextProcessor(&ProcIndex, &Context);
    if( v6 )
      break;
    v7 = KeGetPrcb((unsigned int)ProcIndex);
    PpmPerfQueueAction(v7, PpmPerfActionNoop);
  }
  return 0;
}

Referenced by:

No references.