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