KeSuspendThread

UINT64 __stdcall KeSuspendThread(_ETHREAD *Thread){
  UINT8 OldIrql; 
  _KPRCB *CurrentPrcb; 
  volatile signed __int32 *v4; 
  unsigned int SuspendCount; 

  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  v4 = (volatile signed __int32 *)Thread->Tcb.gap2E0;
  KiAcquireKobjectLockSafe(Thread->Tcb.gap2E0);
  SuspendCount = Thread->Tcb.SuspendCount;
  if( SuspendCount == 127 )
  {
    _InterlockedAnd(v4, 0xFFFFFF7F);
    __writecr8(OldIrql);
    RtlRaiseStatus(-1073741750);
  }
  ++Thread->Tcb.SuspendCount;
  if( !KiSuspendThread(&Thread->Tcb, CurrentPrcb) )
    --Thread->Tcb.SuspendCount;
  _InterlockedAnd(v4, 0xFFFFFF7F);
  KiExitDispatcher(CurrentPrcb, 0i64, AdjustUnwait, 0i64, OldIrql);
  return SuspendCount;
}

Referenced by:

PopTransitionSystemPowerStateEx
PsSuspendThread
PspInsertThread