MiPruneStandbyPages

VOID __stdcall MiPruneStandbyPages(_MI_PARTITION *Partition, UINT64 NodeNumber, UINT64 Channel, UINT64 NumberOfPages){
  UINT64 v4; 
  unsigned int v5; 
  unsigned int v6; 
  _MMPFN *PfnDb; 
  unsigned int v8; 
  unsigned int v9; 
  _MI_PARTITION *v10; 
  int v11; 
  __int64 v12; 
  _QWORD *v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  signed __int32 v17; 
  INT64 Page; 
  INT64 v19; 
  ULONG_PTR v20; 
  char *v21; 
  unsigned __int64 v22; 
  UINT64 v23; 
  UINT64 v24; 
  char *v25; 
  BOOL IsFreeZeroPfnCold; 
  unsigned int v27; 
  unsigned int v28; 
  __int64 v29; 
  __int64 v30; 
  unsigned int PfnChannel; 
  UINT64 v32; 
  unsigned __int64 v33; 
  int v34; 
  ULONG_PTR BugCheckParameter2; 
  __int128 v36; 
  int v38; 
  unsigned int PreferredChannel; 
  UINT64 v40; 
  v40 = NumberOfPages;
  PreferredChannel = Channel;
  v4 = 0i64;
  v5 = NodeNumber;
  v36 = 0i64;
  v6 = 1;
  PfnDb = MmGetPfnDb();
  v8 = 2;
  v9 = Channel;
  v10 = Partition;
  v34 = *(_DWORD *)(*((_QWORD *)Partition + 2) + 4544i64 * (unsigned int)NodeNumber + 4280) & 1;
  v11 = (unsigned __int16)KeNumberNodes;
  if( (unsigned __int16)KeNumberNodes > 1u )
  {
    do
    {
      v12 = *(unsigned int *)(qword_140C4DBD8 + 4i64 * (v6 + v5 * v11));
      v13 = (_QWORD *)(*((_QWORD *)v10 + 2) + 4544 * v12);
      if( v13[522] || !*(_DWORD *)InitializationPhase )
      {
        v14 = (unsigned int)MmNumberOfChannels;
        if( MmNumberOfChannels )
        {
          v15 = v14 * MiNodeFreeZeroPages(v13, v9, 4096);
          if( v15 > 0x10000 )
          {
            MiInitializePageColorBase(0i64, (unsigned int)(v12 + 1), (INT64)&v36);
            v16 = v15 - 0x10000;
            if( v16 )
            {
              while( 1 )
              {
                v17 = _InterlockedExchangeAdd((volatile signed __int32 *)v36, 1u);
                Page = MiGetPage(v10, DWORD2(v36) & (unsigned int)v17 | HIDWORD(v36), 0x40ui64);
                v19 = Page;
                if( Page == -1 )
                {
                  NumberOfPages = v40;
                }
                else
                {
                  LODWORD(v20) = MiSwapNumaStandbyPage(Page, v5, PreferredChannel, 16);
                  BugCheckParameter2 = v20;
                  v21 = (char *)MmGetPfnDb() + 48 * v20;
                  v22 = (unsigned __int8)MiLockPageInline((INT64)v21);
                  *((_QWORD *)v21 + 3) |= 0x4000000000000000ui64;
                  MiInsertPageInFreeOrZeroedList(BugCheckParameter2, 2ui64);
                  _InterlockedAnd64((volatile signed __int64 *)v21 + 3, 0x7FFFFFFFFFFFFFFFui64);
                  __writecr8(v22);
                  if( BugCheckParameter2 == v19 )
                    return;
                  NumberOfPages = v40;
                  if( ++v4 == v40 )
                    return;
                }
                v10 = Partition;
                if( !--v16 )
                  goto LABEL_15;
              }
            }
          }
          NumberOfPages = v40;
LABEL_15:
          v9 = PreferredChannel;
        }
      }
      v11 = (unsigned __int16)KeNumberNodes;
      ++v6;
    }
    while( v6 < (unsigned __int16)KeNumberNodes );
    PfnDb = MmGetPfnDb();
  }
  if( v4 < NumberOfPages )
  {
    do
    {
      v23 = MiRemoveLowestPriorityStandbyPage(v10, 8ui64, 0i64);
      v24 = v23;
      if( v23 == -1i64 )
        break;
      v38 = 0;
      v25 = (char *)PfnDb + 48 * v23;
      ++v4;
      IsFreeZeroPfnCold = MiIsFreeZeroPfnCold((INT64)v25);
      v27 = v8;
      v8 |= 0x400u;
      v28 = v27 & 0xFFFFFBFF;
      if( !IsFreeZeroPfnCold )
        v8 = v28;
      LODWORD(v29) = MiSearchNumaNodeTable((PVOID)((v25 - (char *)PfnDb) / 48));
      v30 = *(unsigned int *)(v29 + 8);
      PfnChannel = MiGetPfnChannel((INT64)v25);
      if( (_DWORD)v30 != v5 || PfnChannel != PreferredChannel && v34 )
      {
        if( (unsigned __int64)MiNodeFreeZeroPages((_QWORD *)(*((_QWORD *)v10 + 2) + 4544 * v30), PfnChannel, 4096) >= 0x200 )
        {
          LODWORD(v32) = MiSwapNumaStandbyPage(v24, v5, PreferredChannel, 48);
          if( v32 == v24 )
          {
            v38 = 1;
          }
          else
          {
            v24 = v32;
            v25 = (char *)MmGetPfnDb() + 48 * v32;
            v8 &= ~0x400u;
          }
        }
        else
        {
          --v4;
        }
      }
      v33 = (unsigned __int8)MiLockPageInline((INT64)v25);
      *((_QWORD *)v25 + 3) |= 0x4000000000000000ui64;
      MiInsertPageInFreeOrZeroedList(v24, v8);
      _InterlockedAnd64((volatile signed __int64 *)v25 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v33);
      if( v38 == 1 )
        break;
      PfnDb = MmGetPfnDb();
    }
    while( v4 < v40 );
  }
}

Referenced by:

MiRebalanceZeroFreeLists