RtlpSizeHeapInternal
UINT64 __stdcall RtlpSizeHeapInternal(PVOID HeapHandle, PVOID BaseAddress){
UINT64 v2;
UINT64 v3;
INT64 v5;
INT64 v6;
UINT8 *v8;
INT64 v9;
UINT8 v10;
int v11;
int v12;
unsigned __int16 v13;
int v15;
unsigned __int16 v16;
unsigned __int64 v17;
int v18;
unsigned __int16 v19;
__int64 v20;
__int64 v21;
int v22;
int v23;
int v24;
v3 = v2;
if( *((_DWORD *)HeapHandle + 4) == -857879331 )
{
v6 = RtlpHpVsChunkSize((INT64)HeapHandle + 64, v2, v2, 0i64);
if( v6 == -1 )
RtlpLogHeapFailure(9i64, (INT64)HeapHandle, v3, v5, v5 & v20, v5 & v21);
return v6;
}
if( (*((_DWORD *)HeapHandle + 30) & 1) != 0 )
{
v8 = RtlpProbeUserBufferSafe((INT64)HeapHandle, v2);
}
else
{
if( (v2 & 0xF) != 0 )
{
v9 = 9i64;
}
else
{
v8 = (UINT8 *)(v2 - 16);
_m_prefetchw((const void *)(v2 - 16));
if( *(_BYTE *)(v2 - 16 + 15) == 5 )
v8 -= 16 * v8[14];
if( (v8[15] & 0x3F) != 0 )
goto LABEL_14;
v2 = (UINT64)v8;
v9 = 8i64;
}
RtlpLogHeapFailure(v9, (INT64)HeapHandle, v2, 0i64, 0i64, 0i64);
v8 = 0i64;
}
LABEL_14:
if( !v8 )
return -1i64;
v10 = v8[15];
v11 = *((_DWORD *)HeapHandle + 31);
if( v10 == 4 )
{
if( v11 )
{
v12 = *((_DWORD *)v8 + 2);
LOWORD(v22) = v12;
if( (v12 & *((_DWORD *)HeapHandle + 31)) != 0 )
v22 = *((_DWORD *)HeapHandle + 34) ^ v12;
v13 = v22;
}
else
{
v13 = *((_WORD *)v8 + 4);
}
return *((_QWORD *)v8 - 2) - v13;
}
else
{
if( v11 )
{
v15 = *((_DWORD *)v8 + 2);
v11 = *((_DWORD *)HeapHandle + 31);
LOWORD(v23) = v15;
if( (v11 & v15) != 0 )
v23 = *((_DWORD *)HeapHandle + 34) ^ v15;
v16 = v23;
v10 = v8[15];
}
else
{
v16 = *((_WORD *)v8 + 4);
}
if( v10 == 5 )
{
v17 = *((unsigned __int16 *)v8 + 6) ^ (unsigned __int64)*((unsigned __int16 *)HeapHandle + 70);
}
else if( (v10 & 0x40) != 0 )
{
v17 = *(unsigned __int16 *)&v8[16 * (v10 & 0x3F) + 12];
}
else if( (v10 & 0x3F) == 63 )
{
if( v11 )
{
v18 = *((_DWORD *)v8 + 2);
LOWORD(v24) = v18;
if( (v18 & *((_DWORD *)HeapHandle + 31)) != 0 )
v24 = *((_DWORD *)HeapHandle + 34) ^ v18;
v19 = v24;
}
else
{
v19 = *((_WORD *)v8 + 4);
}
v17 = *(_QWORD *)&v8[16 * v19];
}
else
{
v17 = v10 & 0x3F;
}
return 16i64 * v16 - v17;
}
}Referenced by:
RtlSizeHeap