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