MiReserveWorkingSetSwapSpace

NTSTATUS __stdcall MiReserveWorkingSetSwapSpace(
        _MI_PARTITION *Partition,
        VOID *ReservationRuns,
        UINT64 PageFileNumber,
        UINT64 SwapFileNumber,
        UINT64 PagesToOutSwap,
        UINT64 NumberOfPages){
  unsigned int v6; 
  _MMPAGING_FILE *i; 
  unsigned int Size; 
  UINT64 v11; 
  __int64 v12; 
  UINT64 v13; 

  v6 = SwapFileNumber;
  for( i = Partition->Vp.PagingFile[(unsigned int)SwapFileNumber];
        ;
        i = Partition->Vp.PagingFile[(unsigned int)PagesToOutSwap] )
  {
    if( v6 == (_DWORD)PagesToOutSwap || (_DWORD)PagesToOutSwap == 16 )
    {
      v11 = 1i64;
    }
    else
    {
      Size = i->Size;
      v11 = (i->_bf_cc & 0x20) != 0 ? Size >> 1 : Size - (Size >> 6);
    }
    LODWORD(v12) = MiReserveWorkingSetSwapSpaceRuns(
                     Partition,
                     NumberOfPages,
                     v6,
                     v11,
                     (_MI_WS_SWAP_RESERVATION_RUN *)ReservationRuns);
    if( !v12 )
      break;
    MiFreeReservationRuns(Partition, (_MI_WS_SWAP_RESERVATION_RUN *)ReservationRuns, v13);
    memset(ReservationRuns, 0i64, 0x50u);
    if( v6 == (_DWORD)PagesToOutSwap || (unsigned int)PagesToOutSwap >= 0x10 )
    {
      LODWORD(v12) = -1073741275;
      return v12;
    }
    v6 = PagesToOutSwap;
  }
  return v12;
}

Referenced by:

MmOutSwapVirtualAddresses
MmOutSwapWorkingSet