KeRetryOutswapProcess

VOID __stdcall KeRetryOutswapProcess(_EPROCESS *Process){
  unsigned __int8 CurrentIrql; 
  int v3; 
  signed __int64 *v4; 
  signed __int64 v5; 
  signed __int64 v6; 
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  KiAcquireKobjectLockSafe(Process);
  v3 = *((_DWORD *)Process + 210) & 7;
  if( v3 == 1 )
    _InterlockedXor((volatile signed __int32 *)Process + 210, 7u);
  _InterlockedAnd((volatile signed __int32 *)Process, 0xFFFFFF7F);
  __writecr8(CurrentIrql);
  if( v3 == 1 )
  {
    v4 = (signed __int64 *)((char *)Process + 360);
    _m_prefetchw(&KiProcessOutSwapListHead);
    v5 = KiProcessOutSwapListHead;
    do
    {
      *v4 = v5;
      v6 = v5;
      v5 = _InterlockedCompareExchange64(&KiProcessOutSwapListHead, (signed __int64)v4, v5);
    }
    while( v5 != v6 );
    if( !v5 )
      KeSetEvent(&KiSwapEvent, 10);
  }
}

Referenced by:

MiProcessWorkingSets
MmReleaseCommitForMemResetPages