RtlpSetupExtendedBlock
VOID *__stdcall RtlpSetupExtendedBlock(
VOID *Heap,
UINT8 Flags,
VOID *BaseAddress,
UINT64 ExtraSize,
UINT64 Interceptor,
VOID *a6){
char v7;
char v8;
char *v10;
__int64 v11;
int v12;
unsigned __int16 v13;
int v15;
v7 = *((char *)BaseAddress - 1);
v8 = 0;
v10 = (char *)BaseAddress + (unsigned __int16)Interceptor;
if( v7 == 4 )
{
if( ((Flags | *((_BYTE *)Heap + 116)) & 1) == 0 )
{
ExAcquireResourceExclusiveLite(*((_QWORD *)Heap + 44), 1, (INT64)BaseAddress);
v8 = 1;
}
if( *((_DWORD *)Heap + 31) )
{
*((_DWORD *)BaseAddress - 2) ^= *((_DWORD *)Heap + 34);
if( *((char *)BaseAddress - 5) != (*((char *)BaseAddress - 8) ^ (unsigned __int8)(*((char *)BaseAddress - 7) ^ *((char *)BaseAddress - 6))) )
RtlpAnalyzeHeapFailure((_HEAP *)Heap, (_HEAP_ENTRY *)BaseAddress - 1);
}
*((_WORD *)BaseAddress - 4) += Interceptor;
LOWORD(v11) = *((_WORD *)BaseAddress - 4);
*((char *)BaseAddress - 2) = (unsigned __int16)Interceptor >> 4;
if( *((_DWORD *)Heap + 31) )
{
*((char *)BaseAddress - 5) = *((char *)BaseAddress - 8) ^ *((char *)BaseAddress - 7) ^ *((char *)BaseAddress - 6);
*((_DWORD *)BaseAddress - 2) ^= *((_DWORD *)Heap + 34);
}
*(v10 - 2) = (unsigned __int16)Interceptor >> 4;
}
else
{
if( v7 == 5 )
{
LOWORD(v11) = *((_WORD *)BaseAddress - 2) ^ *((_WORD *)Heap + 70);
}
else if( (v7 & 0x40) != 0 )
{
LOWORD(v11) = *((_WORD *)BaseAddress + 8 * (v7 & 0x3F) - 2);
}
else if( (v7 & 0x3F) == 63 )
{
if( *((_DWORD *)Heap + 31) )
{
v12 = *((_DWORD *)BaseAddress - 2);
LOWORD(v15) = v12;
if( (v12 & *((_DWORD *)Heap + 31)) != 0 )
v15 = *((_DWORD *)Heap + 34) ^ v12;
v13 = v15;
}
else
{
v13 = *((_WORD *)BaseAddress - 4);
}
v11 = *((_QWORD *)BaseAddress + 2 * v13 - 2);
}
else
{
LOWORD(v11) = v7 & 0x3F;
}
*(v10 - 2) = (unsigned __int16)Interceptor >> 4;
*((char *)BaseAddress - 1) = ((unsigned __int16)Interceptor >> 4) | *((char *)BaseAddress - 1) & 0xC0 | 0x40;
}
*(v10 - 1) = 5;
*((_WORD *)v10 - 2) = Interceptor + v11;
*((_DWORD *)v10 - 2) = (_DWORD)a6;
if( v8 )
ExReleaseResourceLite(*((PERESOURCE *)Heap + 44));
return v10;
}Referenced by:
RtlpAllocateHeapInternal