KeSuspendThread

__int64 __fastcall KeSuspendThread(__int64 a1){
  UINT8 OldIrql; 
  _KPRCB *CurrentPrcb; 
  volatile signed __int32 *v4; 
  unsigned int v5; 
  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  v4 = (volatile signed __int32 *)(a1 + 736);
  KiAcquireKobjectLockSafe((PVOID)(a1 + 736));
  v5 = *(char *)(a1 + 644);
  if( v5 == 127 )
  {
    _InterlockedAnd(v4, 0xFFFFFF7F);
    __writecr8(OldIrql);
    RtlRaiseStatus(-1073741750);
  }
  ++*(_BYTE *)(a1 + 644);
  if( !KiSuspendThread((_KTHREAD *)a1, CurrentPrcb) )
    --*(_BYTE *)(a1 + 644);
  _InterlockedAnd(v4, 0xFFFFFF7F);
  KiExitDispatcher(CurrentPrcb, 0i64, AdjustUnwait, 0i64, OldIrql);
  return v5;
}

Referenced by:

PopTransitionSystemPowerStateEx
PsSuspendThread
PspInsertThread