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.