RtlpHpSizeHeapInternal

UINT64 __fastcall RtlpHpSizeHeapInternal(__int128 *a1, UINT64 a2, CHAR a3, INT64 *a4){
  union _RTL_RUN_ONCE *HeapManager; 
  __int64 v9; 
  INT64 v10; 
  int v11; 
  INT64 v13; 
  INT64 v14; 
  __int64 v15; 
  __int128 v16; 
  if( (_WORD)a2 )
  {
    v11 = 0;
  }
  else
  {
    v16 = *a1;
    HeapManager = RtlpHpEnvGetHeapManager(&v16);
    v10 = RtlCSparseBitmapBitmaskRead((INT64)&HeapManager[2], 2 * ((v9 - HeapManager[1].Value) >> 20));
    if( !v10 )
      return RtlpHpLargeAllocSize((INT64)a1, a2, a3, a4);
    v11 = v10 - 1;
  }
  if( v11 == 2 )
    return RtlpHpLargeAllocSize((INT64)a1, a2, a3, a4);
  v13 = RtlpHpSegDescriptorValidate((INT64)&a1[12 * v11 + 16], a2);
  if( v13 )
    return RtlpHpSegSizeInternal((INT64)a1 + v15 + 256, v13, a2, v14, a4);
  else
    return -1i64;
}

Referenced by:

RtlpHpExtrasGet
RtlpHpSizeHeap