Amd64InitializeProfiling

INT64 __fastcall Amd64InitializeProfiling(INT64 a1){
  int v1; 
  int v2; 
  __int64 v3; 
  unsigned int v4; 
  INT8 *Memory; 
  unsigned int i; 
  __int64 v7; 
  __int64 *v8; 
  __int64 **v9; 
  __int64 *v10; 
  INT64 result; 
  v1 = *((_DWORD *)KeGetPcr() + 105);
  v2 = 0;
  v3 = 176i64;
  if( !v1 )
  {
    v4 = HalpQueryMaximumRegisteredProcessorCount(a1) << 6;
    Memory = HalpMmAllocateMemory(v4);
    Amd64CounterStatus = (__int64)Memory;
    if( !Memory )
      KeBugCheckEx(0xACu, v4, 0xAB00ui64, (ULONG_PTR)"minkernel\\hals\\lib\\hwperfcnt\\pc\\amd64.c", 0x267ui64);
    memset((INT64)Memory, 0i64);
    Amd64ProfileSourceDescriptorListLock = 0i64;
    qword_140C48918 = (__int64)&Amd64ProfileSourceDescriptorListHead;
    Amd64ProfileSourceDescriptorListHead = &Amd64ProfileSourceDescriptorListHead;
    for( i = 0; i < 0xB0; ++i )
    {
      v7 = 27i64 * i;
      if( !BYTE5(Amd64ProfileSourceDescriptorTable[v7 + 3]) )
      {
        v8 = &Amd64ProfileSourceDescriptorTable[v7 + 1];
        v9 = (__int64 **)qword_140C48918;
        if( *(_QWORD ***)qword_140C48918 != &Amd64ProfileSourceDescriptorListHead )
          __fastfail(3u);
        ++Amd64ProfileSourceDescriptorCount;
        *v8 = (__int64)&Amd64ProfileSourceDescriptorListHead;
        v8[1] = (__int64)v9;
        *v9 = v8;
        qword_140C48918 = (__int64)v8;
      }
    }
  }
  v10 = qword_140C05790;
  do
  {
    KeAddProcessorAffinityEx(v10, v1);
    v10 += 27;
    --v3;
  }
  while( v3 );
  do
  {
    __writemsr(v2 - 1073676288, 0i64);
    result = Amd64FreeCounter((unsigned int)v2++);
  }
  while( v2 < 4 );
  return result;
}

Referenced by:

No references.