PpmEventProcessorVetoRundown

VOID __stdcall PpmEventProcessorVetoRundown(_KPRCB *Prcb){
  _PPM_IDLE_STATES *IdleStates; 
  unsigned int v3; 
  __int16 Group; 
  __int16 v5; 
  unsigned __int8 v6; 
  unsigned int v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  _LIST_ENTRY *p_VetoListHead; 
  _LIST_ENTRY *Flink; 
  unsigned int i; 
  __int16 v13; 
  int v14[2]; 
  _EVENT_DATA_DESCRIPTOR a2; 
  unsigned __int8 *p_GroupIndex; 
  int v17; 
  int v18; 
  int *p_i; 
  int v20; 
  int v21; 
  _LIST_ENTRY *v22; 
  int v23; 
  int v24; 
  __int64 v25; 
  int v26; 
  int v27; 

  IdleStates = Prcb->PowerState.IdleStates;
  memset(v14, 0, 7);
  if( IdleStates )
  {
    v3 = 1;
    for( i = 1; v3 < IdleStates->ProcessorIdleCount; i = v3 )
    {
      Group = Prcb->Group;
      a2.Reserved = 0;
      LOWORD(v14[0]) = Group;
      BYTE2(v14[0]) = Prcb->GroupIndex;
      *(int *)((char *)v14 + 3) = v3;
      a2.Ptr = (unsigned __int64)v14;
      a2.Size = 7;
      PpmEventTracePreVetoAccounting(
        &PPM_ETW_PROCESSOR_PRE_VETO_ACCOUNTING_RUNDOWN,
        &a2,
        (INT64)&IdleStates->State[v3].VetoAccounting);
      v3 = i + 1;
    }
    if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, &PPM_ETW_PROCESSOR_IDLE_VETO_RUNDOWN) )
    {
      v5 = Prcb->Group;
      a2.Reserved = 0;
      v18 = 0;
      v13 = v5;
      a2.Ptr = (unsigned __int64)&v13;
      p_GroupIndex = &Prcb->GroupIndex;
      a2.Size = 2;
      v17 = 1;
      v6 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&stru_140C23628 + 122);
      v7 = 0;
      v8 = v6;
      i = 0;
      if( IdleStates->ProcessorIdleCount )
      {
        v9 = 0i64;
        do
        {
          v21 = 0;
          p_i = (int *)&i;
          v20 = 4;
          p_VetoListHead = &IdleStates->State[v9].VetoAccounting.VetoListHead;
          Flink = p_VetoListHead->Flink;
          if( p_VetoListHead->Flink != p_VetoListHead )
          {
            do
            {
              v24 = 0;
              v27 = 0;
              v22 = Flink + 1;
              v23 = 4;
              v25 = (__int64)&Flink[1].Flink + 4;
              v26 = 4;
              EtwWriteEx(PpmEtwHandle, &PPM_ETW_PROCESSOR_IDLE_VETO_RUNDOWN, 0i64, 0, 0, 0, 5u, &a2);
              Flink = Flink->Flink;
            }
            while( Flink != p_VetoListHead );
            v7 = i;
          }
          i = ++v7;
          v9 = v7;
        }
        while( v7 < IdleStates->ProcessorIdleCount );
      }
      KxReleaseSpinLock((UINT64 *)&stru_140C23628 + 122);
      __writecr8(v8);
    }
  }
}

Referenced by:

PpmEventTraceControlCallback