MiAddToReservationCluster

NTSTATUS __stdcall MiAddToReservationCluster(
        _MMPAGING_FILE *PagingFile,
        _RTL_BITMAP *AllocationBitmap,
        UINT64 AdditionalPagesMax,
        UINT64 CompareOffset,
        UINT64 *MdlPage,
        UINT64 *TotalDummyPages){
  unsigned int v6; 
  _MI_PARTITION *Partition; 
  unsigned int v8; 
  __int64 v9; 
  UINT64 v11; 
  _MMPFN *v12; 
  unsigned int v13; 
  unsigned __int64 v14; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v15; 
  unsigned __int64 Long_high; 
  _MI_RESAVAIL_CHARGE v17; 
  unsigned int *Buffer; 
  unsigned int *v20; 
  unsigned int v21; 
  unsigned int *v22; 
  bool v23; 
  bool i; 
  __int64 v25; 
  UINT64 v26; 
  _MMPTE *PointerPte; 
  unsigned int v29; 

  v29 = AdditionalPagesMax;
  v6 = 0;
  Partition = PagingFile->Partition;
  PointerPte = (_MMPTE *)Partition;
  v8 = CompareOffset;
  v9 = 5i64 * (PagingFile->_bf_cc & 0xF);
  v25 = v9;
  if( (_DWORD)AdditionalPagesMax )
  {
    while( 1 )
    {
      v11 = *(&Partition->PageLists.ModifiedPageListByReservation[0].Flink + v9);
      v26 = v11;
      if( v11 == 0xFFFFFFFFFi64 )
        break;
      v12 = &MmGetPfnDb()[v11];
      v13 = 0;
      v14 = MiLockPageInline(v12);
      if( v11 == PointerPte[v25 + 354].u.Long )
      {
        v15.Long = (unsigned __int64)v12->OriginalPte.u;
        if( *(&stru_140C4DB30 + 42) && (v15.Long & 0x10) == 0 )
          v15.Long &= ~*(&stru_140C4DB30 + 42);
        Long_high = HIDWORD(v15.Long);
        if( (_DWORD)Long_high != v8 )
        {
          v13 = Long_high - v8;
          if( !MI_IS_PTE_IN_WS_SWAP_SET(PointerPte) || (unsigned int)Long_high < v8 || v13 > 0x1F || v13 + v6 >= v29 )
            goto LABEL_16;
        }
        if( _bittest64((const signed __int64 *)AllocationBitmap->Buffer, Long_high) )
          goto LABEL_16;
        if( v13 )
        {
          if( v8 >= AllocationBitmap->SizeOfBitMap )
            goto LABEL_16;
          if( v13 > 1 )
          {
            if( AllocationBitmap->SizeOfBitMap - v8 < v13 )
              goto LABEL_16;
            Buffer = AllocationBitmap->Buffer;
            v20 = &Buffer[(unsigned __int64)v8 >> 5];
            v21 = *v20;
            v22 = &Buffer[(unsigned __int64)(v13 + v8 - 1) >> 5];
            if( v20 != v22 )
            {
              for( i = (v21 & (-1 << v8)) == 0; i; i = *v20 == 0 )
              {
                if( ++v20 == v22 )
                {
                  v23 = ((0xFFFFFFFF >> ~(v13 + v8 - 1)) & *v20) == 0;
                  goto LABEL_37;
                }
              }
LABEL_16:
              _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
              __writecr8(v14);
              return v6;
            }
            v23 = (v21 & (0xFFFFFFFF >> (32 - v13) << v8)) == 0;
LABEL_37:
            if( !v23 )
              goto LABEL_16;
          }
          else if( _bittest((const signed __int32 *)AllocationBitmap->Buffer, v8) )
          {
            goto LABEL_16;
          }
        }
        v17 = MiReferencePageForModifiedWrite(v12, 0i64);
        _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v14);
        if( v17 == MiChargeFailed )
          return v6;
        if( v13 )
        {
          v6 += v13;
          v8 += v13;
          *(_DWORD *)TotalDummyPages += v13;
          do
          {
            *MdlPage++ = *(&stru_140C4DB30 + 495);
            --v13;
          }
          while( v13 );
        }
        ++v6;
        *MdlPage = v26;
        ++v8;
        ++MdlPage;
        if( v17 == MiChargedGlobalNowLow && v6 >= 0x10 )
          return v6;
      }
      else
      {
        _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        __writecr8(v14);
      }
      if( v6 == v29 )
        return v6;
      Partition = (_MI_PARTITION *)PointerPte;
      v9 = v25;
    }
  }
  return v6;
}

Referenced by:

MiBuildReservationCluster