ExpHpCompactionRoutine

NTSTATUS __stdcall ExpHpCompactionRoutine(INT64 a1, _XSTATE_CONFIGURATION *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; 
  unsigned __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  _QWORD *v19; 
  unsigned __int64 v20; 
  _QWORD *v21; 
  void *v22; 
  VOID *v23; 
  __int128 v25[5]; 
  int v26; 
  int v27; 
  __int64 v28; 

  v26 = a1;
  v2 = 0;
  v3 = a1;
  v4 = (int)a1;
  v25[0] = (__int128)_mm_load_si128((const __m128i *)&xmmword_140010E90);
  v5 = *((int *)v25 + 2 * (int)a1);
  v6 = *((int *)v25 + 2 * v4 + 1);
  v27 = v5;
  v7 = v6;
  if( dword_140C57DD0 )
  {
    v28 = 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(&v20, v12);
              v12 ^= 1i64 << v20;
              RtlpInterlockedFlushSList();
              if( v11 )
              {
                while( 1 )
                {
                  v19 = v21;
                  if( !v21 )
                    break;
                  v21 = (_QWORD *)*v21;
                  *v19 = v11;
                  v11 = v19;
                }
              }
              else
              {
                v11 = v21;
              }
            }
            while( 1 )
            {
              v22 = v11;
              if( !v11 )
                break;
              v11 = (_QWORD *)*v11;
              LODWORD(v23) = ExGetHeapFromVA(v22);
              RtlpHpFreeHeap(v23, v22, 0i64);
            }
            v7 = v6;
          }
          v13 = *(__int16 *)(v9 + 278);
          v14 = *(_QWORD *)(v13 + v9 + 264) >> *(_BYTE *)(v9 + 267);
          if( v14 <= 8 )
            v14 = 8i64;
          if( *(_QWORD *)(v13 + v9 + 272) + *(_QWORD *)(v13 + v9 + 280) > v14 )
            RtlpHpHeapCompact(v9);
          ++v8;
        }
        while( v8 <= v7 );
        v5 = v28;
      }
      ++v2;
    }
    while( v2 < dword_140C57DD0 );
    v3 = v26;
    LODWORD(v5) = v27;
  }
  LODWORD(v15) = 3;
  v16 = (int)v5;
  if( (int)v6 >= 3 )
    LODWORD(v6) = 3;
  while( v16 <= (int)v6 )
  {
    v17 = qword_140CDAE00[v16];
    v15 = *(__int16 *)(v17 + 278);
    v18 = *(_QWORD *)(v15 + v17 + 264) >> *(_BYTE *)(v17 + 267);
    if( v18 <= 8 )
      v18 = 8i64;
    if( *(_QWORD *)(v15 + v17 + 272) + *(_QWORD *)(v15 + v17 + 280) > v18 )
      LODWORD(v15) = RtlpHpHeapCompact(qword_140CDAE00[v16]);
    ++v16;
  }
  if( !v3 )
    LODWORD(v15) = (unsigned int)ExpHpCompactSessionPools();
  if( v3 == 1 )
    *(&WheapDeferredInternalLogsEventLock + 133) = 0;
  else
    *(&WheapDeferredInternalLogsEventLock + 132) = 0;
  return v15;
}

Referenced by:

No references.