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