PpmParkReportParkedCore

VOID __stdcall PpmParkReportParkedCore(_KPRCB *Prcb){
  unsigned __int64 v2; 
  unsigned __int64 v3; 
  __int64 Number; 
  unsigned __int64 v5; 
  __int16 v6; 

  v2 = (unsigned int)KiProcessorIndexToNumberMappingTable[Prcb->Number];
  v3 = ((unsigned __int64)qword_140C127C8[v2 >> 6] >> (v2 & 0x3F)) & 1;
  KeTransitionProcessorParkState(Prcb);
  Number = Prcb->Number;
  Prcb->PowerState.Parked = 1;
  v5 = 1i64 << (KiProcessorIndexToNumberMappingTable[Number] & 0x3F);
  _InterlockedOr64(
    (volatile signed __int64 *)&PpmPerfCoreParkingMask.Bitmap[(unsigned __int64)(unsigned int)KiProcessorIndexToNumberMappingTable[Number] >> 6],
    v5);
  _disable();
  LODWORD(Number) = Prcb->InterruptCount;
  Prcb->InterruptRate = 0;
  Prcb->InterruptLastCount = Number;
  if( (v6 & 0x200) != 0 )
    _enable();
  if( (_BYTE)v3 )
  {
    v5 = (unsigned int)KiProcessorIndexToNumberMappingTable[Prcb->Number];
    _InterlockedOr64(&qword_140C129D8[v5 >> 6], 1i64 << (KiProcessorIndexToNumberMappingTable[Prcb->Number] & 0x3F));
    Prcb->PowerState.SoftParked = 1;
  }
  PpmEventCoreParkingStateChangeEx((INT64)Prcb, v3, (NPTEXTMETRIC *)v5);
}

Referenced by:

PpmPerfAction