PpmPerfSnapDeliveredPerformance

char __fastcall PpmPerfSnapDeliveredPerformance(__int64 a1, char a2, __int64 a3){
  __int64 v3; 
  unsigned __int64 *v7; 
  __int64 v8; 
  bool v9; 
  char result; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  void(__fastcall *v15)(UINT64 *); 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  __int64 v18; 
  const _EVENT_DESCRIPTOR *v19; 
  UINT64 v20; 
  __int64 v21; 
  UINT64 v22; 
  UINT8 v23; 
  UINT64 v24; 
  int *v25; 
  int v26; 
  UINT64 ThrottleMSR; 
  int v28; 
  int v29; 
  int v30; 
  unsigned __int64 v31; 
  UINT64 v32; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  int *v34; 
  __int64 v35; 
  UINT64 *v36; 
  __int64 v37; 
  int *v38; 
  __int64 v39; 

  v3 = *(_QWORD *)(a1 + 16);
  if( !v3 )
    return 1;
  v7 = (unsigned __int64 *)(v3 + 128);
  if( *(_BYTE *)(a1 + 60) )
  {
    v8 = a1 - 33128;
    v9 = a1 - 33128 != (_QWORD)KeGetCurrentPrcb();
    result = PpmSnapPerformanceAccumulation((_KPRCB *)(a1 - 33128), 0, v9, 1u, (_PROC_PERF_CHECK_SNAP *)(v3 + 128));
  }
  else
  {
    v8 = 0i64;
    v9 = 0;
    while( 1 )
    {
      result = PpmHvSnapPerformanceAccumulation((_QWORD *)a1, 0i64, a3, (_QWORD *)(v3 + 128));
      if( !a2 )
        break;
      if( result )
        goto LABEL_5;
    }
  }
  if( result )
  {
LABEL_5:
    v11 = *(_QWORD *)(v3 + 224);
    if( *v7 <= v11 )
      return 0;
    v12 = *(_QWORD *)(v3 + 136) - *(_QWORD *)(v3 + 232);
    v31 = *v7 - v11;
    if( v12 > v31 && v9 )
    {
      return 0;
    }
    else
    {
      if( v8 )
      {
        if( !v9 )
        {
          v13 = *(_QWORD *)(v8 + 33128);
          v14 = *(_QWORD *)(v8 + 33136);
          ThrottleMSR = 0i64;
          if( PopProcessorThrottleLogInterval )
          {
            if( v13 )
            {
              if( v14 )
              {
                v15 = *(void(__fastcall **)(UINT64 *))(v13 + 224);
                if( v15 )
                {
                  if( *(_BYTE *)(v8 + 33008) )
                  {
                    v15(&ThrottleMSR);
                    if( *(_DWORD *)(v14 + 72) < *(_DWORD *)(v13 + 324) )
                    {
                      *(_BYTE *)(v8 + 33016) = 0;
                    }
                    else if( *(_BYTE *)(v8 + 33016) )
                    {
                      if( *(_QWORD *)(v8 + 33024) != ThrottleMSR )
                      {
                        v24 = (unsigned int)(*(_DWORD *)(v8 + 33012) + 1);
                        *(_DWORD *)(v8 + 33012) = v24;
                        if( !((unsigned int)v24 % PopProcessorThrottleLogInterval) || (_DWORD)v24 == 1 )
                        {
                          LODWORD(v24) = KeGetPcr()->Prcb.Number;
                          PopDiagTraceIllegalProcessorThrottle(v24, ThrottleMSR, (_LARGE_INTEGER *)(v8 + 33032));
                        }
                      }
                    }
                    else
                    {
                      *(_BYTE *)(v8 + 33016) = 1;
                    }
                    *(_QWORD *)(v8 + 33024) = ThrottleMSR;
                  }
                }
              }
            }
          }
        }
      }
      if( v12 )
      {
        v16 = (*(_QWORD *)(v3 + 160) - *(_QWORD *)(v3 + 256)) / v12;
        v17 = (*(_QWORD *)(v3 + 152) - *(_QWORD *)(v3 + 248)) / v12;
        v18 = *(_QWORD *)a1 ? *(unsigned int *)(*(_QWORD *)a1 + 316i64) : *(unsigned int *)(v8 + 68);
        if( __PAIR64__(v17, v16) != *(_QWORD *)(v3 + 320) )
        {
          v30 = (*(_QWORD *)(v3 + 152) - *(_QWORD *)(v3 + 248)) * v18 / 0x64ui64 / v12;
          v29 = v17;
          v28 = v16;
          v26 = 0;
          if( *(_BYTE *)(a1 + 60) )
          {
            v19 = &PPM_ETW_DELIVERED_PERF_CHANGE;
            LOWORD(v26) = *(unsigned __int8 *)(a1 - 32920);
            BYTE2(v26) = *(_BYTE *)(a1 - 32919);
            *(_QWORD *)&UserData.Size = 3i64;
          }
          else
          {
            v19 = (const _EVENT_DESCRIPTOR *)PPM_ETW_DELIVERED_PERF_CHANGE_HV;
            v26 = *(_DWORD *)(*(_QWORD *)(a1 + 8) + 20i64);
            *(_QWORD *)&UserData.Size = 4i64;
          }
          UserData.Ptr = (unsigned __int64)&v26;
          if( PpmEtwRegistered )
          {
            if( PpmEtwHandle
              && (EtwpLevelKeywordEnabled(
                    (_TRACE_ENABLE_INFO *)(*(_QWORD *)(PpmEtwHandle + 32) + 96i64),
                    v19->Level,
                    v19->Keyword)
               || *(_BYTE *)(v21 + 101)
               && EtwpLevelKeywordEnabled((_TRACE_ENABLE_INFO *)(*(_QWORD *)(v21 + 40) + 96i64), v23, v20)) )
            {
              v32 = PpmConvertTime(v22, PopQpcFrequency, 0xF4240ui64);
              v34 = &v28;
              v36 = &v32;
              v25 = &v29;
              v35 = 4i64;
              v37 = 8i64;
              v39 = 4i64;
              if( v19 != &PPM_ETW_DELIVERED_PERF_CHANGE )
                v25 = &v30;
              v38 = v25;
              EtwWriteEx(PpmEtwHandle, v19, 0i64, 0, 0, 0, 4u, &UserData);
            }
          }
        }
      }
      result = 1;
      *(_OWORD *)(v3 + 224) = *(_OWORD *)v7;
      *(_OWORD *)(v3 + 240) = *(_OWORD *)(v3 + 144);
      *(_OWORD *)(v3 + 256) = *(_OWORD *)(v3 + 160);
      *(_OWORD *)(v3 + 272) = *(_OWORD *)(v3 + 176);
      *(_OWORD *)(v3 + 288) = *(_OWORD *)(v3 + 192);
      *(_OWORD *)(v3 + 304) = *(_OWORD *)(v3 + 208);
    }
  }
  return result;
}

Referenced by:

PpmCheckSnapAllDeliveredPerformance
PpmPerfAction