KiCompleteDirectSwitchThread

char __fastcall KiCompleteDirectSwitchThread(__int64 a1, __int64 a2){
  int v2; 
  UINT64 updated; 
  __int64 v6; 
  unsigned __int64 v7; 
  v2 = *(_DWORD *)(a2 + 120);
  if( (v2 & 0x20) != 0 )
  {
    _interlockedbittestandreset((volatile signed __int32 *)(a2 + 120), 5u);
    _disable();
    updated = KiUpdateTotalCyclesCurrentThread(a1, a2, 0i64);
    _enable();
    v6 = *(_QWORD *)(a1 + 11528);
    if( v6 )
    {
      v7 = *(_QWORD *)(a2 + 32);
      if( v7 > updated )
        *(_QWORD *)(v6 - 184) += v7 - updated;
    }
    LOBYTE(v2) = KiRemoveBoostThread((_KPRCB *)a1, (_KTHREAD *)a2);
    *(_QWORD *)(a2 + 32) = updated;
  }
  return v2;
}

Referenced by:

KeReleaseSemaphoreEx