MiOutSwapWorkingSet

VOID __stdcall MiOutSwapWorkingSet(_MMSUPPORT_INSTANCE *Vm, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  bool v9; 
  _MMSUPPORT_SHARED *SharedVm; 
  UINT8 v11; 
  int v12; 
  UINT8 v13; 
  INT64 v14[22]; 

  memset(v14, 0i64, sizeof(v14));
  v9 = (Vm->Flags._bf_0 & 7) == 0;
  v14[19] = (INT64)MiOutSwapWorkingSetPte;
  LOWORD(v14[0]) = 129;
  v14[3] = (INT64)Vm;
  v14[21] = a5;
  if( v9 )
  {
    v14[4] = a3;
    LOWORD(v14[0]) = 131;
    v14[5] = a4;
    SharedVm = MiGetSharedVm(Vm);
    v11 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
    SharedVm->GoodCitizenWaiting = 0;
    v12 = *(_DWORD *)(a2 + 48);
    BYTE6(v14[0]) = v11;
    if( (v12 & 4) != 0 )
    {
      v13 = v11;
      goto LABEL_5;
    }
  }
  else
  {
    BYTE6(v14[0]) = 17;
  }
  MiWalkPageTables((INT64)v14);
  if( (Vm->Flags._bf_0 & 7) != 0 )
    return;
  v13 = BYTE6(v14[0]);
LABEL_5:
  MiUnlockWorkingSetExclusive(Vm, v13);
}

Referenced by:

MiOutSwapKernelStackPage
MmOutSwapVirtualAddresses
MmOutSwapWorkingSet