MiBeginProcessClean

__int64 __fastcall MiBeginProcessClean(__int64 a1, __int64 a2){
  INT64 v2; 
  INT64 *SharedVm; 
  KIRQL v6; 
  unsigned int v7; 
  void *v8; 
  void *v9; 
  v2 = a2 + 1664;
  if( (*(_DWORD *)(a2 + 1124) & 0x20) != 0 )
    return 1i64;
  --*(_WORD *)(a1 + 486);
  ExAcquirePushLockExclusiveEx(a2 + 1224, 0i64);
  *(_BYTE *)(a1 + 1304) |= 1u;
  SharedVm = MiGetSharedVm(v2);
  v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
  v7 = 0;
  *((_DWORD *)SharedVm + 1) = 0;
  _InterlockedOr((volatile signed __int32 *)(a2 + 1124), 0x20u);
  if( (*(_BYTE *)(v2 + 187) & 0x60) != 96 )
    *(_BYTE *)(v2 + 187) &= 0x9Fu;
  MiUnlockWorkingSetExclusive(v2, v6);
  UNLOCK_ADDRESS_SPACE(a1, a2);
  v8 = (void *)MiOutlawInswaps(a2);
  v9 = v8;
  if( (unsigned __int64)v8 > 2 )
    MiFreeWorkingSetSwapContext(*(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a2 + 1838)), v8);
  LOBYTE(v7) = v9 != 0i64;
  return v7;
}

Referenced by:

MiReAcquireOutSwappedProcessCommit
MmCleanProcessAddressSpace