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