PpmPerfFeedbackCounterRead

VOID __stdcall PpmPerfFeedbackCounterRead(_PROC_FEEDBACK_COUNTER *Counter, UINT8 Reset, UINT64 *Value){
  void(__fastcall *InstantaneousRead)(unsigned __int64, unsigned int *); 
  unsigned __int64 Context; 
  unsigned __int64 LastReferenceCount; 
  unsigned __int64 v8; 
  unsigned __int64 LastActualCount; 
  __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 

  InstantaneousRead = Counter->InstantaneousRead;
  Context = Counter->Context;
  v12 = 0i64;
  v11 = 0i64;
  if( Counter->Differential )
  {
    ((void(__fastcall *)(unsigned __int64, UINT8, unsigned __int64 *, __int64 *))InstantaneousRead)(
      Context,
      Reset,
      &v11,
      &v12);
    LastReferenceCount = Counter->LastReferenceCount;
    if( v11 == LastReferenceCount )
    {
      LODWORD(v8) = Counter->CachedValue;
    }
    else
    {
      LastActualCount = Counter->LastActualCount;
      v10 = v12 - LastActualCount;
      v8 = (v12 - LastActualCount) * Counter->Scaling / (v11 - LastReferenceCount);
      Counter->LastReferenceCount = v11;
      Counter->CachedValue = v8;
      Counter->LastActualCount = v10 + LastActualCount;
    }
    *(_DWORD *)Value = v8;
  }
  else
  {
    InstantaneousRead(Context, (unsigned int *)Value);
  }
}

Referenced by:

PpmInstallFeedbackCounters