Amd64EnableMonitoring

INT64 __fastcall Amd64EnableMonitoring(INT64 a1, INT64 a2, _DWORD *a3){
  unsigned int v3; 
  unsigned int v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  int ProfileDescriptor; 
  _DWORD *v9; 
  INT64 v10; 
  CHAR v11; 
  _DWORD *a2a; 
  unsigned int a3a; 
  a2a = 0i64;
  v3 = a1;
  a3a = 0;
  v5 = a2;
  v6 = (unsigned __int8)HalpAcquireHighLevelLock(&Amd64ProfileSourceDescriptorListLock);
  ProfileDescriptor = HalpGetProfileDescriptor(v5, &Amd64ProfileSourceDescriptorListHead, &a2a);
  if( ProfileDescriptor >= 0 )
  {
    LODWORD(v7) = *((_DWORD *)KeGetPcr() + 105);
    v9 = a2a;
    if( ((*(_QWORD *)&a2a[2 * ((unsigned int)KiProcessorIndexToNumberMappingTable[v7] >> 6) + 10] >> (KiProcessorIndexToNumberMappingTable[v7] & 0x3F)) & 1) != 0 )
    {
      ProfileDescriptor = Amd64AllocateCounter(v3, a2a, &a3a);
      if( ProfileDescriptor >= 0 )
      {
        v10 = a3a;
        if( v3 )
        {
          v11 = 0;
          *a3 = a3a;
        }
        else
        {
          v11 = 1;
        }
        Amd64ConfigureCounter(v10, 1, (unsigned int)v9[6], (unsigned int)v9[52], v11);
      }
    }
    else
    {
      ProfileDescriptor = -1073741637;
    }
  }
  KxReleaseSpinLock(&Amd64ProfileSourceDescriptorListLock);
  __writecr8(v6);
  return(unsigned int)ProfileDescriptor;
}

Referenced by:

No references.