EmonDisableMonitoring

INT64 __fastcall EmonDisableMonitoring(INT64 a1, UINT64 *a2){
  INT64 result; 
  _QWORD *v3; 
  unsigned int i; 
  __int64 v5; 
  __int64 v6; 
  result = (unsigned int)(EmonNumberCounters * *((_DWORD *)KeGetPcr() + 105));
  v3 = (_QWORD *)(EmonCounterStatus + 16i64 * (unsigned int)result);
  if( a2 )
  {
    i = *(_DWORD *)a2;
    if( (*(_DWORD *)a2 & 0x40000000) != 0 )
      i = EmonNumberArchCounters + (i & 0xBFFFFFFF);
LABEL_8:
    EmonConfigureCounter(i, 0, 0i64, 0i64, 0);
    v5 = EmonCounterStatus + 16i64 * (unsigned int)(EmonNumberCounters * *((_DWORD *)KeGetPcr() + 105));
    v6 = 2i64 * i;
    *(_DWORD *)(v5 + 8 * v6 + 4) = 0;
    *(_DWORD *)(v5 + 8 * v6) = 3;
    return(unsigned int)_InterlockedExchangeAdd(&HalpPmuInUse, 0xFFFFFFFE);
  }
  for( i = 0; i < EmonNumberCounters; v3 += 2 )
  {
    if( *v3 == __PAIR64__(a1, 0) )
      break;
    ++i;
  }
  if( i != EmonNumberCounters )
    goto LABEL_8;
  return result;
}

Referenced by:

No references.