MiReplenishPageSlist

VOID __fastcall MiReplenishPageSlist(INT64 a1, INT64 a2, UINT64 a3){
  int v3; 
  __int64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  UINT64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  UINT64 v12; 
  _QWORD *v13; 
  __int64 v14; 
  __int64 v15; 
  _MMPFN *PfnDb; 
  INT64 v17; 
  struct _SLIST_ENTRY *v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  volatile signed __int32 *v22; 
  unsigned int v23; 
  unsigned int v24; 
  unsigned __int64 v25; 
  int v26; 
  __int64 v27; 
  unsigned __int64 v28; 
  bool v29; 
  unsigned __int64 v30; 
  int v31; 
  unsigned int v32; 
  unsigned int v33; 
  _QWORD *v34; 
  UINT64 v35; 
  volatile signed __int64 *v36; 
  __int64 v37; 
  __int64 v38; 
  struct _SLIST_ENTRY *List; 
  _QWORD *v40; 
  INT64 v41[2]; 
  __int128 v42[8]; 
  v3 = *(_DWORD *)(a1 + 4);
  v32 = a3;
  v5 = (int)a2;
  *(_OWORD *)v41 = 0i64;
  memset(v42, 0, sizeof(v42));
  if( (v3 & 0x20) == 0 )
  {
    v37 = 16i64 * (unsigned int)a3;
    v38 = *(_QWORD *)(a1 + 8i64 * (int)a2 + 4200);
    v6 = *(unsigned __int16 *)(v37 + v38);
    v7 = *(unsigned int *)(a1 + 6300);
    v8 = (unsigned int)a3;
    if( v6 < v7 )
    {
      v9 = (int)v7 - v6;
      v10 = v9 + 64;
      v40 = (_QWORD *)(*(_QWORD *)(a1 + 16) + 4544 * ((unsigned __int64)(unsigned int)a3 >> byte_140C4DBCC));
      v33 = (unsigned __int8)(MiChannelMaximumPowerOf2Mask & ((unsigned int)a3 >> byte_140C4DBCD));
      if( (_DWORD)a2 )
      {
        v11 = *(_QWORD *)(a1 + 2184);
        v36 = (volatile signed __int64 *)(a1 + 2304);
        if( MiNodeFreeZeroPages(v40, v33, 4096) < v10 )
          return;
      }
      else
      {
        v11 = *(_QWORD *)(a1 + 2176);
        v36 = (volatile signed __int64 *)(a1 + 2240);
        if( MiNodeFreeZeroPages(v40, v33, 4098) < v10 || *(_BYTE *)(a1 + 4829) == 1 )
          return;
      }
      v12 = *(_QWORD *)(v11 + 40 * v8);
      v13 = (_QWORD *)(v11 + 40 * v8);
      v34 = v13;
      if( v9 <= v12 )
        v12 = v9;
      if( *(_QWORD *)(a1 + 7104) - v12 >= 0x420 )
      {
        LODWORD(v41[1]) = 16;
        v31 = HvlEnlightenments & 0x200000;
        v14 = 0i64;
        if( !(unsigned int)MiDecreaseAvailablePages((_MI_PARTITION *)a1, v12, 0x420ui64, 0i64) )
          goto LABEL_58;
        v15 = v13[2];
        PfnDb = MmGetPfnDb();
        v17 = (INT64)PfnDb + 48 * v15;
        v35 = v12;
        v18 = 0i64;
        List = (struct _SLIST_ENTRY *)v17;
        while( 1 )
        {
          if( _interlockedbittestandset64((volatile signed __int32 *)(v17 + 24), 0x3Fui64) )
          {
            v26 = HIDWORD(v41[0]);
LABEL_50:
            v12 -= v14;
            if( v14 )
            {
              if( v26 )
              {
                LODWORD(v41[0]) = 1;
                MiNotifyPageHeat(v41);
              }
              v34[2] = v15;
              if( v15 == 0xFFFFFFFFFi64 )
              {
                MiUpdateZeroFreeBitmap(a1, (unsigned int)v5, v32, 0i64);
                v34[3] = 0xFFFFFFFFFi64;
              }
              else
              {
                MiSetPfnBlink((_MMPFN *)v17, 0xFFFFFFFFFui64, 0i64);
              }
              InterlockedPushListSList((PSLIST_HEADER)(v37 + v38), List, v18, v14);
              *v34 -= v14;
              v30 = -v14;
              _InterlockedExchangeAdd64(v36, v30);
              _InterlockedExchangeAdd64(&v40[v5 + 516], v30);
              if( (unsigned int)MmNumberOfChannels > 1 )
                _InterlockedExchangeAdd64(&v40[2 * v33 + 527 + v5], v30);
            }
LABEL_58:
            if( v12 )
              MiIncreaseAvailablePages((_MI_PARTITION *)a1, v12);
            return;
          }
          v18 = (struct _SLIST_ENTRY *)v17;
          if( !(_DWORD)v5 && (MiFlags & 0x80u) != 0 && (++dword_140C4E50C & MmPageValidationFrequency) == 0 )
          {
            MiArePageContentsZero((PVOID)((v17 - (__int64)PfnDb) / 48));
            PfnDb = MmGetPfnDb();
          }
          if( dword_140C4E40C == 1 )
          {
            LOBYTE(v19) = 1;
            v20 = (v17 - (__int64)PfnDb) / 48;
            v21 = (((((unsigned __int128)((v17 - (__int64)PfnDb) * (__int128)0x2AAAAAAAAAAAAAABi64) >> 64) & 0x8000000000000000ui64) != 0i64)
                 + (unsigned __int8)((__int64)((unsigned __int128)((v17 - (__int64)PfnDb)
                                                                 * (__int128)0x2AAAAAAAAAAAAAABi64) >> 64) >> 3)) & 0x1F;
            v22 = (volatile signed __int32 *)(qword_140C4E468 + 4 * (v20 >> 5));
            if( (unsigned __int64)(v21 + 1) > 0x20 )
            {
              if( v21 )
              {
                v24 = 32 - (v20 & 0x1F);
                _InterlockedOr(v22++, ((1 << v24) - 1) << v21);
                v19 = 1i64 - v24;
                if( v19 >= 0x20 )
                {
                  v25 = v19 >> 5;
                  v19 += -32i64 * (v19 >> 5);
                  do
                  {
                    *v22++ = -1;
                    --v25;
                  }
                  while( v25 );
                }
                if( !v19 )
                  goto LABEL_28;
              }
              v23 = (1 << v19) - 1;
            }
            else
            {
              v23 = 1 << v21;
            }
            _InterlockedOr(v22, v23);
          }
LABEL_28:
          *(_BYTE *)(v17 + 34) = *(_BYTE *)(v17 + 34) & 0xF8 | 5;
          if( (*(_BYTE *)(v17 + 34) & 8) != 0 )
            MiPageListCollision(v17);
          *(_QWORD *)(v17 + 24) &= 0xFFFFFFF000000000ui64;
          _InterlockedAnd64((volatile signed __int64 *)(v17 + 24), 0x7FFFFFFFFFFFFFFFui64);
          if( v31 && MiIsFreeZeroPfnCold(v17) )
          {
            v26 = HIDWORD(v41[0]);
            if( HIDWORD(v41[0]) < 0x10 )
            {
              *((_QWORD *)v42 + HIDWORD(v41[0])) = v15 << 12;
              v26 = ++HIDWORD(v41[0]);
            }
          }
          else
          {
            v26 = HIDWORD(v41[0]);
          }
          v15 = *(_QWORD *)v17 & 0xFFFFFFFFFi64;
          PfnDb = MmGetPfnDb();
          if( v15 == 0xFFFFFFFFFi64 )
            v17 = 0i64;
          else
            v17 = (INT64)PfnDb + 48 * v15;
          v27 = (__int64)v18[1].Next ^ (LODWORD(v18[1].Next) ^ ((_DWORD)v5 << 12)) & 0xF000;
          if( v27 && qword_140C4DC80 )
          {
            if( (v27 & 0x10) != 0 )
              LODWORD(v27) = v27 & 0xFFFFFFEF;
            else
              LODWORD(v27) = ~(_DWORD)qword_140C4DC80 & v27;
          }
          v28 = (unsigned int)v27 | 0xFFFFFFFE00000000ui64;
          if( qword_140C4DC80 )
          {
            if( (qword_140C4DC80 & v28) != 0 )
              v28 = (unsigned int)v27 | 0xFFFFFFFE00000010ui64;
            else
              v28 |= qword_140C4DC80;
          }
          ++v14;
          v18[1].Next = (_SLIST_ENTRY *)v28;
          v29 = v35-- == 1;
          v18->Next = (_SLIST_ENTRY *)v17;
          if( v29 )
            goto LABEL_50;
        }
      }
    }
  }
}

Referenced by:

MiGetPage
MiGetPerfectColorHeadPage