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.