MiComputeAgeDistribution

UINT16 __stdcall MiComputeAgeDistribution(_MI_PARTITION *Partition, UINT64 Recompute){
  int v2; 
  __int64 v4; 
  _QWORD **v5; 
  _QWORD *i; 
  _QWORD *v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  unsigned int v10; 
  int v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  __int64 Src[8]; 
  v2 = Recompute;
  memset(&LockHandle, 0, sizeof(LockHandle));
  memset((INT64)Src, 0i64);
  v4 = *((_QWORD *)Partition + 856);
  if( v2 == 1 )
  {
    KeAcquireInStackQueuedSpinLock(&WorkerRoutine, &LockHandle);
    v5 = (_QWORD **)((char *)Partition + 6856);
    for( i = *v5; i != v5; i = (_QWORD *)*i )
      MiUpdateClaimDistribution((INT64)(i - 3), (UINT64 *)Src);
    memmove((UINT8 *)(v4 + 2416), (UINT8 *)Src, 0x40ui64);
    v7 = (_QWORD *)(v4 + 2464);
    v8 = 2i64;
    v9 = 0i64;
    do
    {
      v9 += *v7++;
      --v8;
    }
    while( v8 );
    *(_QWORD *)(v4 + 2408) = v9;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
  else
  {
    v9 = *(_QWORD *)(v4 + 2408);
  }
  v10 = 5;
  v11 = 0;
  while( v9 < 4i64 * *(_QWORD *)(v4 + 2384) )
  {
    ++v11;
    v9 += *(_QWORD *)(v4 + 8i64 * v10 + 2416);
    if( v10 == 1 )
      break;
    --v10;
  }
  v12 = *(_QWORD *)(v4 + 2352);
  if( v12 )
  {
    v13 = (unsigned int)(1000 * v11) / v12;
    if( (unsigned __int16)v13 > 0x3E8u )
      LOWORD(v13) = 1000;
    return v13;
  }
  else if( v11 )
  {
    return 1000;
  }
  else
  {
    return 0;
  }
}

Referenced by:

MiComputeSystemTrimCriteria
MiOrderTrimList