KiSetBasePriorityAndClearDecrement

NTSTATUS __stdcall KiSetBasePriorityAndClearDecrement(_ETHREAD *Thread, INT64 *NewBase, UINT64 ClearForegroundOnly){
  NTSTATUS v3; 
  int v4; 
  char v7; 
  _KPRCB *CurrentPrcb; 
  char v9; 
  _QWORD *v11; 
  _QWORD *v12; 
  v3 = 0;
  v4 = ClearForegroundOnly;
  if( NewBase )
  {
    v7 = *(_BYTE *)NewBase;
    CurrentPrcb = KeGetCurrentPrcb();
    if( *(_BYTE *)NewBase < *((_BYTE *)Thread + 563) )
    {
      if( *((_BYTE *)Thread + 871) )
      {
        v11 = (_QWORD *)((char *)Thread + 816);
        if( *((_QWORD *)Thread + 102) == 1i64 )
        {
          v12 = (_QWORD *)((char *)CurrentPrcb + 34672);
          if( CurrentPrcb != (_KPRCB *)-34672i64 )
          {
            *v11 = *v12;
            *v12 = v11;
            _InterlockedAdd16((volatile signed __int16 *)Thread + 434, 1u);
            KiAbQueueAutoBoostDpc(CurrentPrcb);
            v7 = *(_BYTE *)NewBase;
          }
        }
      }
    }
    *((_BYTE *)Thread + 563) = v7;
    v3 = *(_DWORD *)NewBase;
  }
  v9 = *((_BYTE *)Thread + 564);
  if( v9 )
  {
    if( (v9 & 0xF) != 0 )
      *((_DWORD *)Thread + 218) = KUSER_SHARED_DATA.TickCount.LowPart;
    if( v4 )
    {
      v3 = *((char *)Thread + 195) - (*((_BYTE *)Thread + 564) & 0xF);
      *((_BYTE *)Thread + 564) &= 0xF0u;
    }
    else
    {
      *((_BYTE *)Thread + 564) = 0;
    }
  }
  return v3;
}

Referenced by:

KeRemovePriQueue
KeSetPriorityAndQuantumProcess
KiDeferredReadySingleThread
KiDirectSwitchThread
KiUpdateVPBackingThreadPriority
KiUpdateVpBackingThreadPriorityFromTopLevel