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