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.