PpmPerfUpdateQosDisableReasons

CHAR __stdcall PpmPerfUpdateQosDisableReasons(INT64 *a1){
  CHAR v1; 
  __int64 v3; 
  __int64 v4; 
  unsigned int v5; 
  _QWORD *v6; 
  int v7; 

  v1 = 0;
  v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  if( !byte_140CFBDC8 )
  {
    v4 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - PpmPerfQosDisableAccounting;
    qword_140CFBD18 += *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - PpmPerfQosDisableAccounting;
    if( PpmPerfQosEnabled )
      qword_140CFBD28 += v4;
    v5 = 0;
    v6 = &unk_140CFBD38;
    do
    {
      v7 = PpmPerfQosDisableReasons;
      if( _bittest(&v7, v5) )
        *v6 += v4;
      ++v5;
      ++v6;
    }
    while( v5 < 9 );
  }
  if( a1 )
  {
    if( PpmPerfQosDisableReasons != *(_DWORD *)a1 || !PpmPerfQosDisableAccounting )
      v1 = 1;
    PpmPerfQosDisableReasons = *(_DWORD *)a1;
  }
  PpmPerfQosDisableAccounting = v3;
  return v1;
}

Referenced by:

PpmCheckPausePpmEngineForSx
PpmCheckResumePpmEngineFromSx
PpmPerfTelemetryWorker
PpmPerfUpdateDomainPolicy