RtlpHpLfhBucketActivate
CHAR __stdcall RtlpHpLfhBucketActivate(INT64 a1, UINT64 a2){
CHAR v2;
__int64 v4;
signed __int64 v5;
VOID *v6;
__int64 v7;
unsigned int v8;
unsigned __int64 v9;
__int64 v10;
__int64 v11;
unsigned __int64 v12;
size_t v13;
unsigned int v14;
INT64 v15;
unsigned __int64 v16;
__int64 v17;
VOID *v18;
__int64 v20;
signed __int64 v21;
unsigned __int64 v22;
unsigned __int64 v23;
unsigned __int64 v24;
v2 = a2;
v4 = (unsigned int)a2;
v20 = (unsigned int)a2;
v5 = *(_QWORD *)(a1 + 8i64 * (unsigned int)a2 + 128);
LOBYTE(v6) = v5 & 3;
if( (v5 & 3) == 1 )
{
v21 = *(_QWORD *)(a1 + 8i64 * (unsigned int)a2 + 128);
LOWORD(v21) = v5 | 2;
v6 = (VOID *)_InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 8i64 * (unsigned int)a2 + 128), v21, v5);
if( v6 == (VOID *)v5 )
{
v7 = *(unsigned __int8 *)(a1 + 56);
v8 = 1;
v9 = (unsigned __int64)(((unsigned int)RtlpHpLfhPerfFlags >> 10) & 1) << 6;
v24 = v9 + 64;
v22 = v9 + 128;
v10 = v9 + 135 + v7 - (((_BYTE)v7 - 1) & 7);
v11 = v10 + 8 * v7;
v12 = v9 - (((_BYTE)v11 - 1) & 0x3F);
v23 = v12 + v11 + 63;
if( (RtlpHpLfhPerfFlags & 0x200) != 0 )
v8 = v7;
v13 = v12 + v11 + 63 + (v9 + 64) * v8;
v6 = (VOID *)((__int64(__fastcall *)(_QWORD, unsigned __int64))(a1 ^ RtlpHpHeapGlobals ^ *(_QWORD *)(a1 + 40)))(
*(_QWORD *)a1,
v12 + v11 + 63 + (v9 + 64) * v8);
v14 = 0;
v15 = (INT64)v6;
if( v6 )
{
memset(v6, 0i64, v13);
RtlpHpLfhBucketInitialize(v15, v2);
*(_QWORD *)(v15 + 88) = v15 + v22;
v6 = (VOID *)(v10 + v15);
v16 = v15 + v23;
*(_QWORD *)(v15 + 96) = v6;
if( v8 )
{
v17 = 0i64;
do
{
*(_QWORD *)(*(_QWORD *)(v15 + 96) + 8 * v17) = v16;
v18 = *(VOID **)(*(_QWORD *)(v15 + 96) + 8 * v17);
memset(v18, 0i64, 0x40u);
RtlpHpLfhOwnerInitialize((INT64)v18, *(_BYTE *)(v15 + 1), v14);
++*(_BYTE *)(v15 + 2);
v16 += v24;
v6 = *(VOID **)(v15 + 88);
*((_BYTE *)v6 + v17++) = v14++;
}
while( v14 < v8 );
v4 = v20;
}
*(_QWORD *)(a1 + 8 * v4 + 128) = v15;
}
}
}
return(char)v6;
}Referenced by:
RtlpHpLfhBucketUpdateStats