RtlpCreateUCREntry
INT64 *__fastcall RtlpCreateUCREntry(INT64 a1, INT64 a2, INT64 a3, INT64 a4, UINT64 a5, INT64 *a6){
UINT64 v6;
INT64 v10;
unsigned __int64 v11;
bool v12;
bool v13;
INT64 v14;
unsigned __int64 v15;
INT64 *result;
*(_QWORD *)(a3 + 40) = a4;
v6 = a3 - 16;
*(_BYTE *)(v6 + 15) = 3;
*(_QWORD *)(a3 + 32) = a3 + 48;
*(_DWORD *)(v6 + 8) = 65540;
v10 = *(_QWORD *)(a2 + 40);
if( v10 == a2 )
{
LOBYTE(v11) = 0;
}
else
{
v11 = ((v6 - a2) >> 16) + 1;
if( v11 >= 0xFE )
RtlpLogHeapFailure(3i64, v10, a3 - 16, a2, 0i64, 0i64);
}
v12 = RtlpHeapErrorHandlerThreshold < 1;
*(_BYTE *)(v6 + 14) = v11;
if( v12 )
{
v13 = a5 == v6;
}
else
{
v13 = a5 == v6;
if( a5 > v6 )
{
DbgPrint("((PHEAP_ENTRY)LastKnownEntry <= Entry)");
RtlpHeapHandleError(v14);
}
}
if( !v13 )
*(_WORD *)(v6 + 12) = *(_WORD *)(a1 + 140);
if( *(_DWORD *)(a1 + 124) )
{
*(_BYTE *)(v6 + 11) = *(_BYTE *)(v6 + 8) ^ *(_BYTE *)(v6 + 9) ^ *(_BYTE *)(v6 + 10);
*(_DWORD *)(v6 + 8) ^= *(_DWORD *)(a1 + 136);
}
RtlpInsertUCRBlock(a1, (INT64 **)a3);
++*(_DWORD *)(a2 + 84);
*(_DWORD *)(a2 + 80) += *(_QWORD *)(a3 + 40) >> 12;
*(_QWORD *)(a1 + 576) -= *(_QWORD *)(a3 + 40);
++*(_DWORD *)(a1 + 604);
v15 = *(_QWORD *)(a3 + 40);
if( v15 >= 0xFF000 )
*(_QWORD *)(a1 + 584) += v15;
result = a6;
*a6 = (__int64)(v6 - a5) >> 4;
return result;
}Referenced by:
RtlpDeCommitFreeBlock
RtlpFindAndCommitPages
RtlpInitializeHeapSegment