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.