MiComputeZeroClusterMaximum

unsigned __int64 __fastcall MiComputeZeroClusterMaximum(__int64 a1, __int64 a2, __int64 a3){
  __int64 v3; 
  __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  INT64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  int v16; 
  __int64 v17; 
  unsigned __int64 result; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  unsigned int v21; 
  UINT64 AvailablePagesBelowPriority; 
  v3 = *(_QWORD *)(a1 + 32);
  v6 = *(_QWORD *)(a1 + 8) + 16i64 * *(_QWORD *)(a1 + 24);
  v7 = (((unsigned __int64)(*(_DWORD *)v6 & 0xFFF) + *(_QWORD *)(v6 + 8) + 4095i64) >> 12) - v3;
  v8 = *(_QWORD *)v6 + (v3 << 12);
  if( a3 )
  {
    v9 = (*(unsigned int *)(a3 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a3 + 33) << 32)) - (v8 >> 12);
    if( v7 > v9 + 1 )
      v7 = v9 + 1;
  }
  v10 = *(unsigned __int16 *)(a2 + 174);
  v11 = 20000i64;
  v12 = *(_QWORD *)(qword_140C4E388 + 8 * v10);
  v13 = *(_QWORD *)(*(_QWORD *)(v12 + 6848) + 2384i64);
  v14 = 20000i64;
  if( v13 > 0x4E20 )
    v14 = *(_QWORD *)(*(_QWORD *)(v12 + 6848) + 2384i64);
  if( (v14 & 0xFFFFFFFFFFFFFFFEui64) <= 0x4E20 )
  {
    v15 = 10000i64;
  }
  else
  {
    if( v13 > 0x4E20 )
      v11 = *(_QWORD *)(*(_QWORD *)(v12 + 6848) + 2384i64);
    v15 = v11 >> 1;
  }
  v16 = MiSufficientAvailablePages(v12, v15 >> 1);
  v17 = 1i64;
  if( !v16 )
    v7 = 1i64;
  if( (*(_BYTE *)(a2 + 184) & 0x40) != 0 && (*(_BYTE *)a1 != 1 || (*(_DWORD *)(a1 + 80) & 0x4000) == 0) )
  {
    v19 = *(_QWORD *)(a2 + 120);
    v20 = *(_QWORD *)(a2 + 152);
    if( v19 >= v20 )
      return 1i64;
    if( v19 + v7 > v20 )
      v7 = v20 - v19;
  }
  if( *(_BYTE *)a1 == 1 )
  {
    v21 = *(_DWORD *)(a1 + 80);
    if( (v21 & 0x4000) != 0 )
    {
      AvailablePagesBelowPriority = MiGetAvailablePagesBelowPriority((_MI_PARTITION *)v12, ((v21 >> 3) & 7) + 1);
      if( v7 > AvailablePagesBelowPriority )
        v7 = AvailablePagesBelowPriority;
    }
  }
  if( !v7 )
    v7 = v17;
  result = 512 - ((((unsigned int)MmGetPteBase() + ((v8 >> 9) & 0xFFFFFFF8)) >> 3) & 0x1FF);
  if( v7 <= result )
    return v7;
  return result;
}

Referenced by:

MiExpandSharedZeroCluster
MiGetClusterPage
MiResolvePrivateZeroFault