ExpHpCompactionRoutine

INT64 __fastcall ExpHpCompactionRoutine(INT64 a1, UINT64 a2){
  unsigned int v2; 
  int v3; 
  __int64 v4; 
  INT64 v5; 
  INT64 v6; 
  INT64 v7; 
  INT64 v8; 
  INT64 v9; 
  _QWORD *v10; 
  _QWORD *v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  INT64 result; 
  __int64 v15; 
  __int64 v16; 
  _QWORD *p_Next; 
  unsigned __int64 v18; 
  PSLIST_ENTRY v19; 
  void *v20; 
  PVOID v21; 
  __int128 v22[5]; 
  int v23; 
  unsigned int a1a; 
  INT64 v25; 
  v23 = a1;
  v2 = 0;
  v3 = a1;
  v4 = (int)a1;
  v22[0] = (__int128)_mm_load_si128((const __m128i *)&_xmm);
  v5 = *((int *)v22 + 2 * (int)a1);
  v6 = *((int *)v22 + 2 * v4 + 1);
  a1a = v5;
  v7 = v6;
  if( dword_140C57DD0 )
  {
    v25 = v5;
    do
    {
      v8 = v5;
      if( v5 <= v7 )
      {
        do
        {
          v9 = qword_140C57E00[1048 * v2 + v8];
          v10 = *(_QWORD **)(v9 + 40);
          if( v10 )
          {
            v11 = 0i64;
            v12 = ~*v10;
            while( v12 )
            {
              _BitScanForward64(&v18, v12);
              v12 ^= 1i64 << v18;
              v19 = RtlpInterlockedFlushSList((PSLIST_HEADER)&v10[8 * (unsigned int)v18 + 8]);
              if( v11 )
              {
                while( 1 )
                {
                  p_Next = &v19->Next;
                  if( !v19 )
                    break;
                  v19 = v19->Next;
                  *p_Next = v11;
                  v11 = p_Next;
                }
              }
              else
              {
                v11 = &v19->Next;
              }
            }
            while( 1 )
            {
              v20 = v11;
              if( !v11 )
                break;
              v11 = (_QWORD *)*v11;
              LODWORD(v21) = ExGetHeapFromVA(v20);
              RtlpHpFreeHeap(v21, v20, 0i64);
            }
            v7 = v6;
          }
          v13 = *(__int16 *)(v9 + 278);
          a2 = *(_QWORD *)(v13 + v9 + 264) >> *(_BYTE *)(v9 + 267);
          if( a2 <= 8 )
            a2 = 8i64;
          if( *(_QWORD *)(v13 + v9 + 272) + *(_QWORD *)(v13 + v9 + 280) > a2 )
            RtlpHpHeapCompact(v9);
          ++v8;
        }
        while( v8 <= v7 );
        v5 = v25;
      }
      ++v2;
    }
    while( v2 < dword_140C57DD0 );
    v3 = v23;
    v5 = a1a;
  }
  result = 3i64;
  v15 = (int)v5;
  if( (int)v6 >= 3 )
    LODWORD(v6) = 3;
  while( v15 <= (int)v6 )
  {
    v16 = qword_140CDAE00[v15];
    result = *(__int16 *)(v16 + 278);
    LOBYTE(v5) = *(_BYTE *)(v16 + 267);
    a2 = *(_QWORD *)(result + v16 + 264) >> v5;
    if( a2 <= 8 )
      a2 = 8i64;
    if( *(_QWORD *)(result + v16 + 272) + *(_QWORD *)(result + v16 + 280) > a2 )
      result = RtlpHpHeapCompact(qword_140CDAE00[v15]);
    ++v15;
  }
  if( !v3 )
    result = ExpHpCompactSessionPools(v5, a2);
  if( v3 == 1 )
    ExpHpGCScheduledNonPaged = 0;
  else
    ExpHpGCScheduledPaged = 0;
  return result;
}

Referenced by:

No references.