PpmEventTraceControlCallback
VOID __stdcall PpmEventTraceControlCallback(
GUID *SourceId,
UINT64 ControlCode,
UINT8 Level,
UINT64 MatchAnyKeyword,
UINT64 MatchAllKeyword,
EVENT_FILTER_DESCRIPTOR *FilterData,
PVOID CallbackContext){
int v7;
INT64 v8;
EVENT_DESCRIPTOR *v9;
__int64 v10;
__int64 v11;
EVENT_DESCRIPTOR *v12;
INT64 i;
unsigned int j;
__int64 v15;
INT64 v16;
EVENT_DESCRIPTOR *v17;
unsigned int k;
EVENT_DESCRIPTOR *v19;
_ETHREAD *CurrentThread;
__int64 v21;
_KPRCB *v22;
__int64 v23;
EVENT_DESCRIPTOR *v24;
_KAFFINITY_EX *v25;
unsigned __int64 v26;
__int16 v27;
int v28;
__int16 v29;
UINT64 ProcessorNumber;
if( (ControlCode & 0xFFFFFFFD) == 0 )
{
v28 = 0;
v7 = ControlCode;
v29 = 0;
LODWORD(ProcessorNumber) = 0;
PpmAcquireLock(&PpmPerfPolicyLock);
v26 = KeActiveProcessors.Bitmap[0];
v27 = 0;
v25 = &KeActiveProcessors;
while( !(unsigned int)KeEnumerateNextProcessor(&ProcessorNumber, (unsigned __int16 **)&v25) )
{
KeGetPrcb((unsigned int)ProcessorNumber);
PpmEventTraceProcessorPerformance(v10, v11, v12);
}
for( i = PpmPerfDomainHead; (INT64 *)i != &PpmPerfDomainHead; i = *(_QWORD *)i )
{
if( v7 == 2 )
PpmEventTraceProcessorPerformanceDomainRundown(i, v8, v9);
for( j = 0; j < *(_DWORD *)(i + 200); ++j )
{
v15 = *(_QWORD *)(i + 216) + 136i64 * j;
if( *(_DWORD *)(v15 + 16) == 1 )
PpmEventTraceProcessorPerformanceRundownHv(*(INT64 **)v15, v8, v9);
}
}
if( v7 == 2 )
{
PpmEventTraceLPIState();
PpmEventStaticPolicyRundown();
PpmEventQosSupport(1, v16, v17);
PpmEventHeteroPolicy(1u);
}
for( k = 0; k < (unsigned int)PpmParkNumNodes; ++k )
PpmEventTraceParkNodeRundown(PpmParkNodes + 272i64 * k, v8, v9);
PopAcquireRwLockExclusive((_POP_RW_LOCK *)&PpmIdlePolicyLock);
PpmEventTracePpmProfileStatusRundown();
PpmEventTraceProfiles(1u);
if( PpmEtwRegistered
&& EtwEventEnabled(PpmEtwHandle, (EVENT_DESCRIPTOR *)&PPM_ETW_PROCESSOR_PROFILE_SETTING_RUNDOWN, v19) )
{
PpmInfoTraceProfileSettings();
}
PopReleaseRwLock((UINT64)&PpmIdlePolicyLock);
PpmReleaseLock(&PpmPerfPolicyLock);
if( v7 == 2 )
{
PpmEventTraceAccountingBucketIntervalsRundown();
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PpmIdlePolicyLock, 0i64);
PpmEventTraceCoordinatedIdleStates();
PpmEventTracePlatformIdleAccounting();
PpmEventVetoReasonRundown();
PpmEventPlatformVetoRundown();
v26 = KeActiveProcessors.Bitmap[0];
v27 = 0;
v25 = &KeActiveProcessors;
while( !(unsigned int)KeEnumerateNextProcessor(&ProcessorNumber, (unsigned __int16 **)&v25) )
{
KeGetPrcb((unsigned int)ProcessorNumber);
v22 = (_KPRCB *)v21;
PpmEventProcessorVetoRundown(v21, v23, v24);
PpmEventTraceProcessorIdle(v22);
}
PopExecuteOnTargetProcessors((INT64)&KeActiveProcessors, (INT64)PpmEventTraceProcessorIdleAccounting, 0i64, 0i64);
PopReleaseRwLock((UINT64)&PpmIdlePolicyLock);
}
}
}Referenced by:
No references.