RtlpHpLfhSubsegmentSizeBlock

NTSTATUS __stdcall RtlpHpLfhSubsegmentSizeBlock(INT64 a1, INT64 a2, INT64 a3, INT64 *a4){
  unsigned int v6; 
  int v7; 
  __int64 v8; 
  unsigned int v9; 
  unsigned int v10; 
  char v11; 
  unsigned __int64 v12; 
  int v13; 

  v6 = DWORD2(RtlpHpHeapGlobals) ^ *(_DWORD *)(a2 + 40) ^ ((unsigned int)a2 >> 12);
  v7 = (unsigned __int16)v6;
  v8 = *(_QWORD *)(a1
                 + 8i64
                 * *((unsigned __int8 *)RtlpLfhBucketIndexMap
                   + ((unsigned __int64)((unsigned int)(unsigned __int16)v6 + 15) >> 4))
                 + 128);
  v9 = a3 - HIWORD(v6) - a2;
  v10 = *(_DWORD *)(v8 + 72);
  v11 = *(_BYTE *)(v8 + 76);
  if( v10 )
  {
    v12 = (v9 * (unsigned __int64)v10) >> v11;
    v13 = v9 - v12 * v7;
  }
  else
  {
    v12 = v9 >> v11;
    v13 = ((1 << v11) - 1) & v9;
  }
  if( v13
    || ((*(_QWORD *)(a2 + 8 * ((unsigned __int64)(unsigned int)(2 * v12) >> 6) + 48) >> ((2 * v12) & 0x3F)) & 1) == 0 )
  {
    return -1;
  }
  else
  {
    return RtlpHpLfhSubsegmentSizeBlockInternal(a2, a3, v12, a4);
  }
}

Referenced by:

RtlpHpSegSizeInternal