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.