HalpTimerInitializeProfiling

NTSTATUS __stdcall HalpTimerInitializeProfiling(){
  _KDPC *v0; 
  NTSTATUS v1; 
  _KINTERRUPT_MODE v2; 
  INT64 v3; 
  void *v5; 
  void *v6; 
  void *v7; 
  __int64 v8; 
  void *v9; 
  void *v10; 
  void *v11; 
  __int64 v12; 
  INT64 a6; 
  int v14; 
  _GROUP_AFFINITY GroupAffinity; 

  v0 = (_KDPC *)HalpProfileTimer;
  v1 = 0;
  GroupAffinity = 0i64;
  if( !qword_140C4A3C8 )
  {
    qword_140C4A3C8 = (__int64)HalpMmAllocatePerProcessorMemory();
    if( !qword_140C4A3C8 )
      return -1073741801;
  }
  v14 = 10000;
  (*((void(__fastcall **)(_QWORD, int *))HalpProfileInterface[0] + 3))(0i64, &v14);
  if( KeGetPcr()->Prcb.Number )
  {
    if( v0 )
    {
      HalpInterruptSetIdtEntry(0xFDui64, HalpTimerProfileInterrupt, 15, v3, (UINT64 *)0xFFFFFFFFFFFFFFFDi64);
      if( ((__int64)v0[3].DeferredContext & 1) != 0 )
      {
        HalpTimerGetInternalData(v0, v5, v6, v7);
        v1 = ((__int64(__fastcall *)(__int64))v0[1].SystemArgument1)(v8);
        if( v1 >= 0 )
        {
          HalpTimerGetInternalData(v0, v9, v10, v11);
          ((void(__fastcall *)(__int64))v0[2].DpcListEntry.Next)(v12);
        }
      }
    }
  }
  else if( v0 )
  {
    GroupAffinity.Reserved[1] = 0;
    LOBYTE(v2) = 15;
    GroupAffinity.Reserved[2] = 0;
    *(_DWORD *)&GroupAffinity.Group = (unsigned __int16)((unsigned int)KiProcessorIndexToNumberMappingTable[0] >> 6);
    GroupAffinity.Mask = 1i64 << (KiProcessorIndexToNumberMappingTable[0] & 0x3F);
    LODWORD(a6) = 1;
    return HalpTimerConfigureInterrupt(
             v0,
             (PVOID)0xFD,
             v2,
             v3,
             (UINT64 *)0xFFFFFFFFFFFFFFFDi64,
             a6,
             &GroupAffinity,
             HalpTimerProfileInterrupt);
  }
  return v1;
}

Referenced by:

No references.