MiCheckZeroFreeRebalance

INT64 __fastcall MiCheckZeroFreeRebalance(INT64 a1, UINT64 a2){
  unsigned int v2; 
  _MI_NODE_INFORMATION *v3; 
  __int64 *v4; 
  INT64 result; 
  _MMLISTS v6; 
  __int64 i; 
  INT64 v8; 
  __int64 v9; 
  UINT64 v10; 
  int v11; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  unsigned int Channel; 
  unsigned int NodeNumber; 
  v2 = MmNumberOfChannels;
  memset(&LockHandle, 0, sizeof(LockHandle));
  NodeNumber = (unsigned int)a2 >> byte_140C4DBCC;
  v3 = (_MI_NODE_INFORMATION *)(*(_QWORD *)(a1 + 16) + 4544i64 * ((unsigned int)a2 >> byte_140C4DBCC));
  Channel = 0;
  if( (unsigned int)MmNumberOfChannels > 1 )
    Channel = (unsigned __int16)(unsigned __int8)MiChannelMaximumPowerOf2Mask & (unsigned __int16)((unsigned int)a2 >> byte_140C4DBCD);
  v4 = (__int64 *)((char *)v3 + 4128);
  result = 0i64;
  v6 = ZeroedPageList;
  for( i = 0i64; i <= 1; ++i )
  {
    v8 = result;
    if( v2 > 1 )
      v9 = *((_QWORD *)v3 + 2 * Channel + i + 527);
    else
      v9 = *v4;
    v10 = MiNodeLargeFreeZeroPages(v3, Channel, v6++);
    result = v9 + v8 + v10;
    ++v4;
  }
  if( (unsigned __int64)result < 0x200 )
  {
    result = MiGetNodeStandbyPageCount((_MI_PARTITION *)a1, NodeNumber, Channel);
    if( (unsigned __int64)result >= 0x1000 && !*(_QWORD *)(a1 + 6320) )
    {
      result = *(unsigned int *)(a1 + 4);
      if( (result & 1) == 0 )
      {
        KeAcquireInStackQueuedSpinLock(&qword_140C4E340, &LockHandle);
        if( *(_QWORD *)(a1 + 6320) || (*(_DWORD *)(a1 + 4) & 1) != 0 )
        {
          v11 = 0;
        }
        else
        {
          v11 = 0;
          if( PsReferencePartitionSafe(*(_QWORD *)(a1 + 176)) )
          {
            *(_QWORD *)(a1 + 6304) = 0i64;
            *(_QWORD *)(a1 + 6320) = MiRebalanceZeroFreeLists;
            v11 = 1;
            *(_QWORD *)(a1 + 6328) = a1;
          }
        }
        KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
        result = (unsigned int)KiIrqlFlags;
        __writecr8(LockHandle.OldIrql);
        if( v11 == 1 )
          LODWORD(result) = ExQueueWorkItemToPartition((PVOID)(a1 + 6304));
      }
    }
  }
  return result;
}

Referenced by:

MiGetPage