MiFillNoReservationCluster

NTSTATUS __stdcall MiFillNoReservationCluster(_MI_PARTITION *Partition, UINT64 *Page, UINT64 ClusterSize){
  _MMPFNLIST *p_ModifiedPageListNoReservation; 
  unsigned int v6; 
  UINT64 Flink; 
  _MMPFN *v8; 
  _UNICODE_STRING *v9; 
  unsigned __int64 v10; 
  UINT8 v11; 
  wchar_t *v12; 
  int v13; 
  _MMPTE *v14; 
  _MI_RESAVAIL_CHARGE v15; 
  INT64 *v17; 
  UINT64 v18; 
  UINT64 v19; 
  unsigned int Flags; 
  unsigned int v21; 

  v21 = ClusterSize;
  if( !Partition->Store.Registered
    || (p_ModifiedPageListNoReservation = &Partition->PageLists.ModifiedPageListByReservation[Partition->Store.VirtualPageFileNumber],
        !p_ModifiedPageListNoReservation->Total) )
  {
    p_ModifiedPageListNoReservation = &Partition->PageLists.ModifiedPageListNoReservation;
  }
  v6 = 0;
  Flags = 1;
  do
  {
    Flink = p_ModifiedPageListNoReservation->Flink;
    if( Flink == 0xFFFFFFFFFi64 )
      break;
    v8 = &MmGetPfnDb()[Flink];
    v10 = MiLockPageInline(v8);
    if( Flink != p_ModifiedPageListNoReservation->Flink
      || Partition->Modwriter.PagefileReservationsEnabled
      && (LOBYTE(v13) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v8, v9, v11, v12), v13)
      && ((v8->u4._bf_0 & 0x1000000000i64) != 0 || (__int64)v8->ListEntry.Blink <= 0)
      && MiSufficientAvailablePages((INT64)Partition, 0xA0ui64)
      && (v14 = (_MMPTE *)(v8->PteLong | 0x8000000000000000ui64),
          _InterlockedAnd64(&v8->u2.Lock, 0x7FFFFFFFFFFFFFFFui64),
          __writecr8(v10),
          MiReservePageFileSpace(Partition, v14, 0i64),
          v10 = MiLockPageInline(v8),
          Flink != p_ModifiedPageListNoReservation->Flink) )
    {
      _InterlockedAnd64(&v8->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v10);
    }
    else
    {
      v15 = MiReferencePageForModifiedWrite(v8, Flags);
      _InterlockedAnd64(&v8->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8((unsigned __int8)v10);
      if( v15 == MiChargeFailed )
        break;
      Flags &= ~1u;
      ++v6;
      *Page++ = Flink;
      if( v15 == MiChargedGlobalNowLow && v6 >= 0x10 )
        break;
    }
  }
  while( v6 < v21 );
  if( v6 > 1 )
    qsort((UINT64)&Page[-v6], v6, 8ui64, (INT64)MiModifiedWriterNoReservationSort, v17, v18, v19);
  return v6;
}

Referenced by:

MiGatherPagefilePages