Amd64DisableMonitoring

UINT64 __fastcall Amd64DisableMonitoring(INT64 a1, UINT64 *a2){
  UINT64 result; 
  _QWORD *v3; 
  unsigned int i; 
  unsigned __int64 v5; 
  __int64 v6; 
  int v7; 
  LODWORD(result) = *((_DWORD *)KeGetPcr() + 105);
  v3 = (_QWORD *)(Amd64CounterStatus + ((unsigned __int64)(unsigned int)result << 6));
  if( a2 )
  {
    i = *(_DWORD *)a2;
LABEL_7:
    Amd64ConfigureCounter(i, 0, 0i64, 0i64, 0);
    v5 = Amd64CounterStatus + ((unsigned __int64)*((unsigned int *)KeGetPcr() + 105) << 6);
    v6 = 2i64 * i;
    *(_DWORD *)(v5 + 8 * v6 + 4) &= v7;
    *(_DWORD *)(v5 + 8 * v6) = 3;
    return(unsigned int)_InterlockedExchangeAdd(&HalpPmuInUse, v7 - 2);
  }
  for( i = 0; i < 4; ++i )
  {
    if( *v3 == __PAIR64__(a1, 0) )
      break;
    v3 += 2;
  }
  if( i != 4 )
    goto LABEL_7;
  return result;
}

Referenced by:

No references.