RtlpHpVsContextFreeInternal
INT64 __fastcall RtlpHpVsContextFreeInternal(INT64 *SpinLock, INT64 a2, UINT64 a3, UINT64 a4, INT64 a5){
unsigned int v5;
__int64 v6;
int v7;
unsigned int v8;
UINT64 v10;
int v11;
int v12;
unsigned __int64 v13;
INT64 v14;
int v16;
INT64 v17;
v5 = a4;
v6 = HIDWORD(*(_QWORD *)a3);
v7 = DWORD1(RtlpHpHeapGlobals) ^ HIDWORD(a3) ^ HIDWORD(*(_QWORD *)a3);
v8 = 0;
v10 = a3;
if( (v7 & 0xFF0000) != 0 )
{
v11 = a3 ^ *(_DWORD *)(a3 + 8);
LABEL_3:
v12 = (unsigned __int8)(RtlpHpHeapGlobals ^ v11);
goto LABEL_4;
}
if( (_WORD)v7 )
{
v10 = a3 - 16i64 * (unsigned __int16)(WORD2(a3) ^ v6 ^ WORD2(RtlpHpHeapGlobals));
v16 = HIDWORD(v10) ^ DWORD1(RtlpHpHeapGlobals) ^ HIDWORD(*(_QWORD *)v10);
if( (v16 & 0xFF0000) != 0 )
{
LABEL_17:
v11 = v10 ^ *(_DWORD *)(v10 + 8);
goto LABEL_3;
}
if( (_WORD)v16 )
{
v10 -= 16i64 * (unsigned __int16)(WORD2(v10) ^ HIDWORD(*(_QWORD *)v10) ^ WORD2(RtlpHpHeapGlobals));
goto LABEL_17;
}
}
v12 = 0;
LABEL_4:
v13 = (v10 - (unsigned int)(v12 << 12)) & 0xFFFFFFFFFFFFF000ui64;
if( (((unsigned __int16)(*(_WORD *)(v13 + 32) ^ *(_WORD *)(v13 + 34)) ^ 0x2BED) & 0x7FFF) != 0 )
{
a3 = v13;
v17 = 18i64;
LABEL_21:
RtlpLogHeapFailure(v17, (unsigned __int64)SpinLock ^ SpinLock[16], a3, 0i64, 0i64, 0i64);
return v8;
}
if( ((DWORD1(RtlpHpHeapGlobals) ^ HIDWORD(a3) ^ (unsigned int)v6) & 0xFF0000) == 0 )
{
v17 = 8i64;
goto LABEL_21;
}
v14 = RtlpHpVsChunkFree(SpinLock, v13, (_WORD *)a3, a4, a5);
if( v14 )
{
if( (v5 & 1) == 0 )
RtlpHpReleaseQueuedLockExclusive(*((unsigned int *)SpinLock + 2), a5);
RtlpHpVsSubsegmentFree((INT64)SpinLock, v14, v5);
if( (v5 & 1) == 0 )
RtlpHpAcquireQueuedLockExclusive((INT8)SpinLock, (UINT64 *)*((unsigned int *)SpinLock + 2));
}
return 1;
}Referenced by:
RtlpHpVsContextFreeList