PpmEventTraceControlCallback
void __fastcall PpmEventTraceControlCallback(const _GUID *a1, int a2){
INT64 v3;
NPTEXTMETRIC *v4;
int v5;
_KPRCB *Prcb;
INT64 i;
unsigned int j;
__int64 v9;
INT64 v10;
NPTEXTMETRIC *v11;
unsigned int k;
_ETHREAD *CurrentThread;
INT64 v14;
INT64 v15;
NPTEXTMETRIC *v16;
int v17;
_KPRCB *v18;
_KAFFINITY_ENUMERATION_CONTEXT Context;
UINT64 ProcIndex;
if( (a2 & 0xFFFFFFFD) == 0 )
{
*(_DWORD *)(&Context.CurrentIndex + 1) = 0;
*(&Context.CurrentIndex + 3) = 0;
LODWORD(ProcIndex) = 0;
PpmAcquireLock((_PPM_LOCK *)((char *)&stru_140C23628 + 1048));
Context.CurrentMask = KeActiveProcessors.Bitmap[0];
Context.CurrentIndex = 0;
Context.Affinity = &KeActiveProcessors;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &Context);
if( v5 )
break;
Prcb = KeGetPrcb((unsigned int)ProcIndex);
PpmEventTraceProcessorPerformance((INT64)Prcb);
}
for( i = PpmPerfDomainHead; (INT64 *)i != &PpmPerfDomainHead; i = *(_QWORD *)i )
{
if( a2 == 2 )
PpmEventTraceProcessorPerformanceDomainRundown(i, v3, v4);
for( j = 0; j < *(_DWORD *)(i + 200); ++j )
{
v9 = *(_QWORD *)(i + 216) + 136i64 * j;
if( *(_DWORD *)(v9 + 16) == 1 )
PpmEventTraceProcessorPerformanceRundownHv(*(INT64 **)v9, v3, v4);
}
}
if( a2 == 2 )
{
PpmEventTraceLPIState();
PpmEventStaticPolicyRundown();
PpmEventQosSupport(1, v10, v11);
PpmEventHeteroPolicy(1u);
}
for( k = 0; k < (unsigned int)PpmParkNumNodes; ++k )
PpmEventTraceParkNodeRundown(PpmParkNodes + 272i64 * k);
PopAcquireRwLockExclusive((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
PpmEventTracePpmProfileStatusRundown();
PpmEventTraceProfiles(1u);
if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, &PPM_ETW_PROCESSOR_PROFILE_SETTING_RUNDOWN) )
PpmInfoTraceProfileSettings();
PopReleaseRwLock((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
PpmReleaseLock((INT64 *)&stru_140C23628 + 131);
if( a2 == 2 )
{
PpmEventTraceAccountingBucketIntervalsRundown();
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C23628 + 123, 0i64);
PpmEventTraceCoordinatedIdleStates(v15, v14, v16);
PpmEventTracePlatformIdleAccounting();
PpmEventVetoReasonRundown();
PpmEventPlatformVetoRundown();
Context.CurrentMask = KeActiveProcessors.Bitmap[0];
Context.CurrentIndex = 0;
Context.Affinity = &KeActiveProcessors;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &Context);
if( v17 )
break;
v18 = KeGetPrcb((unsigned int)ProcIndex);
PpmEventProcessorVetoRundown(v18);
PpmEventTraceProcessorIdle(v18);
}
PopExecuteOnTargetProcessors(
&KeActiveProcessors,
(INT64 *)PpmEventTraceProcessorIdleAccounting,
0i64,
0i64,
(UINT64)Context.Affinity,
Context.CurrentMask,
*(UINT64 *)&Context.CurrentIndex);
PopReleaseRwLock((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
}
}
}Referenced by:
No references.