KeThawProcess

VOID __stdcall KeThawProcess(_EPROCESS *TargetProcess, UINT8 DeepFreeze){
  _QWORD **v3; 
  UINT8 OldIrql; 
  INT64 *v6; 
  UINT64 v7; 
  int v8; 
  int v9; 
  _QWORD *i; 
  _QWORD *j; 
  _KTHREAD *v12; 
  _KPRCB *Prcb; 
  v3 = (_QWORD **)((char *)TargetProcess + 48);
  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  v6 = (INT64 *)((char *)TargetProcess + 64);
  Prcb = KeGetCurrentPrcb();
  v7 = 0i64;
  ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)TargetProcess + 8);
  v8 = *((_DWORD *)TargetProcess + 222);
  v9 = v8 + ((*((_DWORD *)TargetProcess + 158) >> 3) & 1);
  if( v9 )
  {
    if( DeepFreeze )
    {
      _interlockedbittestandreset((volatile signed __int32 *)TargetProcess + 158, 3u);
      v7 = KiQueryUnbiasedInterruptTime(0) - *((_QWORD *)TargetProcess + 9);
    }
    else
    {
      *((_DWORD *)TargetProcess + 222) = v8 - 1;
    }
  }
  if( DeepFreeze && (*((_DWORD *)TargetProcess + 158) & 0x10) != 0 )
  {
    for( i = *v3; i != v3; i = (_QWORD *)*i )
      *(i - 64) += v7;
  }
  if( v9 == 1 )
  {
    for( j = *v3; j != v3; j = (_QWORD *)*j )
    {
      v12 = (_ETHREAD *)(j - 95);
      if( DeepFreeze || (*((_DWORD *)v12 + 29) & 0x200000) == 0 )
        KiThawSingleThread(Prcb, (_KTHREAD *)v12, 0);
    }
    ExReleaseSpinLockExclusiveFromDpcLevel(v6);
    KiExitDispatcher(Prcb, 0i64, AdjustUnwait, 0i64, OldIrql);
  }
  else
  {
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)TargetProcess + 8);
    __writecr8(OldIrql);
  }
}

Referenced by:

PsThawProcess