PpmEventProcessorPerfStateChange

VOID __stdcall PpmEventProcessorPerfStateChange(_KPRCB *Prcb, _PROC_PERF_DOMAIN *Domain){
  int v2; 
  const _EVENT_DESCRIPTOR *v4; 
  const _EVENT_DESCRIPTOR *v5; 
  REGHANDLE v6; 
  _ETHREAD *CurrentThread; 
  int v8; 
  int ThreadLock; 
  int CycleTime_high; 
  int v11; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  int *p_CycleTime_high; 
  __int64 v14; 
  INT64 v15[20]; 
  int v16; 
  int v17; 

  v17 = v2;
  v16 = (int)Domain;
  v8 = 0;
  LODWORD(v4) = PpmEventGetEventDescriptorAndProcessorId(
                  (INT64)Prcb,
                  (INT64)&PPM_ETW_PROCESSOR_PERF_STATE_CHANGE,
                  (INT64)&PPM_ETW_PROCESSOR_PERF_STATE_CHANGE_HV,
                  (INT64)&v8,
                  (INT64)v15);
  v5 = v4;
  if( PpmEtwRegistered )
  {
    v6 = PpmEtwHandle;
    if( EtwEventEnabled(PpmEtwHandle, v4) )
    {
      CurrentThread = Prcb->CurrentThread;
      ThreadLock = CurrentThread->Tcb.ThreadLock;
      CycleTime_high = HIDWORD(CurrentThread->Tcb.CycleTime);
      UserData.Ptr = (unsigned __int64)&ThreadLock;
      p_CycleTime_high = &CycleTime_high;
      v15[2] = (INT64)&CurrentThread->Tcb.CycleTime;
      v15[4] = (INT64)&CurrentThread->Tcb.KernelStack;
      v15[6] = (INT64)&CurrentThread->Tcb.CurrentRunTime;
      v15[8] = (INT64)&CurrentThread->Tcb.ExpectedRunTime;
      v15[10] = (INT64)&CurrentThread->Tcb.KernelStack + 4;
      v15[12] = (INT64)&CurrentThread->Tcb.StateSaveArea;
      *(_QWORD *)&UserData.Size = 4i64;
      v14 = 4i64;
      v15[3] = 4i64;
      v15[5] = 4i64;
      v15[7] = 4i64;
      v15[9] = 4i64;
      v15[11] = 4i64;
      v15[13] = 4i64;
      v11 = BYTE4(CurrentThread->Tcb.StateSaveArea);
      v15[14] = (INT64)&v11;
      v15[16] = (INT64)&v16;
      v15[18] = (INT64)&v17;
      v15[15] = 4i64;
      v15[17] = 4i64;
      v15[19] = 4i64;
      EtwWriteEx(v6, v5, 0i64, 0, 0, 0, 0xCu, &UserData);
    }
  }
}

Referenced by:

PpmPerfApplyHiddenProcessorState
PpmPerfArbitratorApplyProcessorState