MiOutSwapWorkingSet

VOID __fastcall MiOutSwapWorkingSet(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  bool v9; 
  INT64 *SharedVm; 
  KIRQL v11; 
  int v12; 
  UINT8 v13; 
  _WORD result[3]; 
  char result_6; 
  INT64 v16; 
  INT64 v17; 
  INT64 v18; 
  INT64(__fastcall *v19)(INT64, UINT64, INT64); 
  INT64 v20; 
  memset((INT64)result, 0i64);
  v9 = (*(_BYTE *)(a1 + 184) & 7) == 0;
  v19 = MiOutSwapWorkingSetPte;
  result[0] = 129;
  v16 = a1;
  v20 = a5;
  if( v9 )
  {
    v17 = a3;
    result[0] = 131;
    v18 = a4;
    SharedVm = MiGetSharedVm(a1);
    v11 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
    *((_DWORD *)SharedVm + 1) = 0;
    v12 = *(_DWORD *)(a2 + 48);
    result_6 = v11;
    if( (v12 & 4) != 0 )
    {
      v13 = v11;
      goto LABEL_5;
    }
  }
  else
  {
    result_6 = 17;
  }
  MiWalkPageTables((INT64)result);
  if( (*(_BYTE *)(a1 + 184) & 7) != 0 )
    return;
  v13 = result_6;
LABEL_5:
  MiUnlockWorkingSetExclusive(a1, v13);
}

Referenced by:

MiOutSwapKernelStackPage
MmOutSwapVirtualAddresses
MmOutSwapWorkingSet