EmonCompleteInitializeProfiling
VOID __fastcall EmonCompleteInitializeProfiling(INT64 a1){
__int64 v1;
__int64 v2;
unsigned __int64 v3;
__int64 v4;
INT64 v5;
unsigned int MaximumRegisteredProcessorCount;
UINT64 v7;
int v8;
unsigned __int64 v9;
if( EmonPebsAvailable )
{
LODWORD(v1) = *((_DWORD *)KeGetPcr() + 105);
v2 = 4096i64;
if( ((_DWORD)v1
|| (MaximumRegisteredProcessorCount = HalpQueryMaximumRegisteredProcessorCount(a1),
LOBYTE(v7) = 1,
(int)KeAllocateProcessorProfileStructures(
MaximumRegisteredProcessorCount,
4096i64,
&EmonDsManagementAreas,
v7) >= 0))
&& (v9 = EmonDsManagementAreas + 160 * v1, (int)KeAllocateProcessorProfileStructures(0, 0i64, &v9, 0i64) >= 0) )
{
if( EmonPebsEntrySize )
v2 = EmonPebsEntrySize * (0x1000u / EmonPebsEntrySize);
v3 = v9;
if( EmonPebs64Bit )
{
v4 = *(_QWORD *)(v9 + 32);
*(_QWORD *)(v9 + 40) = v4;
*(_QWORD *)(v3 + 48) = v2 + v4;
*(_QWORD *)(v3 + 56) = v4;
memset(v3 + 64, 0i64);
v5 = v3 + 128;
}
else
{
v8 = *(_DWORD *)(v9 + 16);
*(_DWORD *)(v9 + 20) = v8;
*(_DWORD *)(v3 + 24) = v8 + v2;
*(_DWORD *)(v3 + 28) = v8;
memset(v3 + 32, 0i64);
v5 = v3 + 96;
}
memset(v5, 0i64);
__writemsr(0x600u, v3);
}
else
{
EmonPebsAvailable = 0;
}
}
}Referenced by:
No references.