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.