MiCheckZeroFreeRebalance

NTSTATUS __stdcall MiCheckZeroFreeRebalance(INT64 a1, UINT64 a2){
  unsigned int v2; 
  _MI_NODE_INFORMATION *v3; 
  volatile unsigned __int64 *FreeCount; 
  unsigned __int64 v5; 
  _MMLISTS v6; 
  __int64 i; 
  unsigned __int64 v8; 
  volatile unsigned __int64 v9; 
  __int64 v10; 
  int v11; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  unsigned int Channel; 
  unsigned int NodeNumber; 

  v2 = MmNumberOfChannels;
  memset(&LockHandle, 0, sizeof(LockHandle));
  NodeNumber = (unsigned int)a2 >> *(&stru_140C4DB30 + 156);
  v3 = (_MI_NODE_INFORMATION *)(*(_QWORD *)(a1 + 16) + 4544i64 * ((unsigned int)a2 >> *(&stru_140C4DB30 + 156)));
  Channel = 0;
  if( (unsigned int)MmNumberOfChannels > 1 )
    Channel = (unsigned __int16)(unsigned __int8)MiChannelMaximumPowerOf2Mask & (unsigned __int16)((unsigned int)a2 >> *(&stru_140C4DB30 + 157));
  FreeCount = v3->FreeCount;
  v5 = 0i64;
  v6 = ZeroedPageList;
  for( i = 0i64; i <= 1; ++i )
  {
    v8 = v5;
    if( v2 > 1 )
      v9 = v3->ChannelFreeCount[Channel][i];
    else
      v9 = *FreeCount;
    LODWORD(v10) = MiNodeLargeFreeZeroPages(v3, Channel, v6++);
    v5 = v9 + v8 + v10;
    ++FreeCount;
  }
  if( v5 < 0x200 )
  {
    MiGetNodeStandbyPageCount((_MI_PARTITION *)a1, NodeNumber, Channel);
    if( v5 >= 0x1000 && !*(_QWORD *)(a1 + 6320) )
    {
      LODWORD(v5) = *(_DWORD *)(a1 + 4);
      if( (v5 & 1) == 0 )
      {
        KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 258, &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);
        LODWORD(v5) = KiIrqlFlags;
        __writecr8(LockHandle.OldIrql);
        if( v11 == 1 )
          LODWORD(v5) = ExQueueWorkItemToPartition((PVOID)(a1 + 6304));
      }
    }
  }
  return v5;
}

Referenced by:

MiGetPage