ExpSaAllocatorOptimizeList
void __fastcall ExpSaAllocatorOptimizeList(__int64 a1){
int v1;
__int64 v3;
_EX_SA_PAGE_GROUP_DESCRIPTOR *v4;
_EX_SA_PAGE_GROUP_DESCRIPTOR *v5;
_EX_SA_PAGE_GROUP_DESCRIPTOR *v6;
_EX_SA_PAGE_GROUP_DESCRIPTOR **v7;
_EX_SA_PAGE_GROUP_DESCRIPTOR *v8;
_EX_SA_PAGE_GROUP_DESCRIPTOR **v9;
_EX_SA_PAGE_GROUP_DESCRIPTOR **v10;
v1 = *(_DWORD *)(a1 + 64);
if( (v1 & 2) != 0 )
{
v3 = a1 + 8;
v4 = *(_EX_SA_PAGE_GROUP_DESCRIPTOR **)(a1 + 8);
if( v4 != (_EX_SA_PAGE_GROUP_DESCRIPTOR *)v3 )
{
do
{
v5 = *(_EX_SA_PAGE_GROUP_DESCRIPTOR **)v4;
if( v4[9] == 512 )
{
v6 = *(_EX_SA_PAGE_GROUP_DESCRIPTOR **)v4;
if( *(_EX_SA_PAGE_GROUP_DESCRIPTOR **)(*(_QWORD *)v4 + 8i64) != v4 )
goto LABEL_15;
v7 = (_EX_SA_PAGE_GROUP_DESCRIPTOR **)*((_QWORD *)v4 + 1);
if( *v7 != v4 )
goto LABEL_15;
*v7 = v6;
*((_QWORD *)v6 + 1) = v7;
ExpSaPageGroupDescriptorFree(v4);
}
else if( !v4[9] )
{
v8 = *(_EX_SA_PAGE_GROUP_DESCRIPTOR **)v4;
v4[10] = 1;
if( *((_EX_SA_PAGE_GROUP_DESCRIPTOR **)v8 + 1) != v4
|| (v9 = (_EX_SA_PAGE_GROUP_DESCRIPTOR **)*((_QWORD *)v4 + 1), *v9 != v4)
|| (*v9 = v8,
*((_QWORD *)v8 + 1) = v9,
v10 = *(_EX_SA_PAGE_GROUP_DESCRIPTOR ***)(a1 + 32),
*v10 != (_EX_SA_PAGE_GROUP_DESCRIPTOR *)(a1 + 24)) )
{
LABEL_15:
__fastfail(3u);
}
*(_QWORD *)v4 = a1 + 24;
*((_QWORD *)v4 + 1) = v10;
*v10 = v4;
*(_QWORD *)(a1 + 32) = v4;
}
v4 = v5;
}
while( v5 != (_EX_SA_PAGE_GROUP_DESCRIPTOR *)v3 );
}
*(_DWORD *)(a1 + 64) = v1 & 0xFFFFFFFD;
}
}Referenced by:
ExpSaAllocatorAllocate
ExpSaAllocatorFree