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; 
  _MI_NODE_INFORMATION *v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v17; 
  signed __int32 v18; 
  UINT64 v19; 
  UINT64 v20; 
  UINT64 v21; 
  _MMPFN *v22; 
  unsigned __int64 v23; 
  INT64 v24; 
  UINT64 v25; 
  UINT64 v26; 
  UINT64 v27; 
  _MMPFN *v28; 
  int v29; 
  unsigned int v30; 
  unsigned int v31; 
  __int64 v32; 
  __int64 v33; 
  unsigned int PfnChannel; 
  unsigned __int64 v35; 
  UINT64 v36; 
  unsigned __int64 v37; 
  INT64 v38; 
  UINT64 v39; 
  UINT64 v40; 
  UINT64 PageFrameIndex; 
  UINT64 PageFrameIndexa; 
  _MI_COLOR_BASE ColorBase[22]; 
  int v45; 
  unsigned int PreferredChannel; 
  UINT64 v47; 

  v47 = NumberOfPages;
  PreferredChannel = Channel;
  v4 = 0i64;
  v5 = NodeNumber;
  *(_OWORD *)ColorBase = 0i64;
  v6 = 1;
  PfnDb = MmGetPfnDb();
  v8 = 2;
  v9 = Channel;
  v10 = Partition;
  LODWORD(v40) = *(_DWORD *)&Partition->Core.NodeInformation[(unsigned int)NodeNumber].Flags & 1;
  v11 = (unsigned __int16)KeNumberNodes;
  if( (unsigned __int16)KeNumberNodes > 1u )
  {
    do
    {
      v12 = *(unsigned int *)(*(&stru_140C4DB30 + 21) + 4i64 * (v6 + v5 * v11));
      v13 = &v10->Core.NodeInformation[v12];
      if( v13->TotalPagesEntireNode || !(_DWORD)InitializationPhase )
      {
        v14 = (unsigned int)MmNumberOfChannels;
        if( MmNumberOfChannels )
        {
          LODWORD(v15) = MiNodeFreeZeroPages(v13, v9, 0x1000ui64);
          v16 = v14 * v15;
          if( (unsigned __int64)(v14 * v15) > 0x10000 )
          {
            MiInitializePageColorBase(0i64, (unsigned int)(v12 + 1), ColorBase);
            v17 = v16 - 0x10000;
            if( v17 )
            {
              while( 1 )
              {
                v18 = _InterlockedExchangeAdd(*(volatile signed __int32 **)ColorBase, 1u);
                LODWORD(v19) = MiGetPage(
                                 (ULONG_PTR *)&v10->Core.PartitionId,
                                 ColorBase[2] & (unsigned int)v18 | ColorBase[3],
                                 0x40ui64);
                v20 = v19;
                if( v19 == -1i64 )
                {
                  NumberOfPages = v47;
                }
                else
                {
                  LODWORD(v21) = MiSwapNumaStandbyPage(v19, v5, PreferredChannel, 0x10ui64);
                  PageFrameIndexa = v21;
                  v22 = &MmGetPfnDb()[v21];
                  v23 = MiLockPageInline(v22);
                  v22->u2._bf_0 |= 0x4000000000000000ui64;
                  MiInsertPageInFreeOrZeroedList(PageFrameIndexa, 2ui64, v24, v25, v40, PageFrameIndexa);
                  _InterlockedAnd64(&v22->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
                  __writecr8(v23);
                  if( PageFrameIndex == v20 )
                    return;
                  NumberOfPages = v47;
                  if( ++v4 == v47 )
                    return;
                }
                v10 = Partition;
                if( !--v17 )
                  goto LABEL_15;
              }
            }
          }
          NumberOfPages = v47;
LABEL_15:
          v9 = PreferredChannel;
        }
      }
      v11 = (unsigned __int16)KeNumberNodes;
      ++v6;
    }
    while( v6 < (unsigned __int16)KeNumberNodes );
    PfnDb = MmGetPfnDb();
  }
  if( v4 < NumberOfPages )
  {
    do
    {
      LODWORD(v26) = MiRemoveLowestPriorityStandbyPage(v10, 8ui64, 0i64);
      v27 = v26;
      if( v26 == -1i64 )
        break;
      v45 = 0;
      v28 = &PfnDb[v26];
      ++v4;
      LOBYTE(v29) = MiIsFreeZeroPfnCold((INT64)v28);
      v30 = v8;
      v8 |= 0x400u;
      v31 = v30 & 0xFFFFFBFF;
      if( !v29 )
        v8 = v31;
      LODWORD(v32) = MiSearchNumaNodeTable((PVOID)(v28 - PfnDb));
      v33 = *(unsigned int *)(v32 + 8);
      PfnChannel = MiGetPfnChannel((INT64)v28);
      if( (_DWORD)v33 != v5 || PfnChannel != PreferredChannel && (_DWORD)v40 )
      {
        LODWORD(v35) = MiNodeFreeZeroPages(&v10->Core.NodeInformation[v33], PfnChannel, 0x1000ui64);
        if( v35 >= 0x200 )
        {
          LODWORD(v36) = MiSwapNumaStandbyPage(v27, v5, PreferredChannel, 0x30ui64);
          if( v36 == v27 )
          {
            v45 = 1;
          }
          else
          {
            v27 = v36;
            v28 = &MmGetPfnDb()[v36];
            v8 &= ~0x400u;
          }
        }
        else
        {
          --v4;
        }
      }
      v37 = MiLockPageInline(v28);
      v28->u2._bf_0 |= 0x4000000000000000ui64;
      MiInsertPageInFreeOrZeroedList(v27, v8, v38, v39, v40, PageFrameIndex);
      _InterlockedAnd64(&v28->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v37);
      if( v45 == 1 )
        break;
      PfnDb = MmGetPfnDb();
    }
    while( v4 < v47 );
  }
}

Referenced by:

MiRebalanceZeroFreeLists