KeEnableProfiling

VOID __stdcall KeEnableProfiling(
        _ETHREAD *Thread,
        UINT64 Flags,
        UINT64 HardwareCounters,
        _THREAD_PERFORMANCE_DATA *UserData,
        INT64 a5,
        ULONGLONG pullResult){
  int v8; 
  _QWORD *PoolWithQuotaTag; 
  _QWORD *v11; 

  v8 = Flags;
  if( (Flags & 0xFFFFFFFE) == 0 && !Thread->Tcb.WaitBlock[0].SparePtr )
  {
    PoolWithQuotaTag = ExAllocatePoolWithQuotaTag((POOL_TYPE)520, 0x1A8ui64, 0x666F7250ui64);
    v11 = PoolWithQuotaTag;
    if( PoolWithQuotaTag )
    {
      memset(PoolWithQuotaTag, 0i64, 0x1A8u);
      v11[1] = UserData;
      *((_DWORD *)v11 + 4) = v8;
      v11[4] = HardwareCounters;
      Thread->Tcb.WaitBlock[0].SparePtr = v11;
      _interlockedbittestandset((volatile signed __int32 *)Thread, 0x10u);
      v11[3] = KeUpdateTotalCyclesCurrentThread(&Thread->Tcb, 0i64);
      if( (v8 & 1) != 0 || HardwareCounters )
      {
        KiBeginCounterAccumulation(&Thread->Tcb, 0);
        _interlockedbittestandset((volatile signed __int32 *)Thread, 0x11u);
      }
    }
  }
}

Referenced by:

NtSetInformationThread