RtlpSetupExtendedBlock
__int64 __fastcall RtlpSetupExtendedBlock(
__int64 a1,
unsigned __int8 a2,
__int64 a3,
__int64 a4,
unsigned __int16 a5,
int a6){
char v7;
char v8;
__int64 v10;
__int64 v11;
int v12;
unsigned __int16 v13;
int v15;
v7 = *(_BYTE *)(a3 - 1);
v8 = 0;
v10 = a3 + a5;
if( v7 == 4 )
{
if( ((a2 | *(_BYTE *)(a1 + 116)) & 1) == 0 )
{
ExAcquireResourceExclusiveLite(*(ERESOURCE **)(a1 + 352), 1u);
v8 = 1;
}
if( *(_DWORD *)(a1 + 124) )
{
*(_DWORD *)(a3 - 8) ^= *(_DWORD *)(a1 + 136);
if( *(_BYTE *)(a3 - 5) != (*(_BYTE *)(a3 - 8) ^ (unsigned __int8)(*(_BYTE *)(a3 - 7) ^ *(_BYTE *)(a3 - 6))) )
RtlpAnalyzeHeapFailure(a1, a3 - 16);
}
*(_WORD *)(a3 - 8) += a5;
LOWORD(v11) = *(_WORD *)(a3 - 8);
*(_BYTE *)(a3 - 2) = a5 >> 4;
if( *(_DWORD *)(a1 + 124) )
{
*(_BYTE *)(a3 - 5) = *(_BYTE *)(a3 - 8) ^ *(_BYTE *)(a3 - 7) ^ *(_BYTE *)(a3 - 6);
*(_DWORD *)(a3 - 8) ^= *(_DWORD *)(a1 + 136);
}
*(_BYTE *)(v10 - 2) = a5 >> 4;
}
else
{
if( v7 == 5 )
{
LOWORD(v11) = *(_WORD *)(a3 - 4) ^ *(_WORD *)(a1 + 140);
}
else if( (v7 & 0x40) != 0 )
{
LOWORD(v11) = *(_WORD *)(a3 + 16i64 * (v7 & 0x3F) - 4);
}
else if( (v7 & 0x3F) == 63 )
{
if( *(_DWORD *)(a1 + 124) )
{
v12 = *(_DWORD *)(a3 - 8);
LOWORD(v15) = v12;
if( (v12 & *(_DWORD *)(a1 + 124)) != 0 )
v15 = *(_DWORD *)(a1 + 136) ^ v12;
v13 = v15;
}
else
{
v13 = *(_WORD *)(a3 - 8);
}
v11 = *(_QWORD *)(a3 + 16i64 * v13 - 16);
}
else
{
LOWORD(v11) = v7 & 0x3F;
}
*(_BYTE *)(v10 - 2) = a5 >> 4;
*(_BYTE *)(a3 - 1) = (a5 >> 4) | *(_BYTE *)(a3 - 1) & 0xC0 | 0x40;
}
*(_BYTE *)(v10 - 1) = 5;
*(_WORD *)(v10 - 4) = a5 + v11;
*(_DWORD *)(v10 - 8) = a6;
if( v8 )
ExReleaseResourceLite(*(PERESOURCE *)(a1 + 352));
return v10;
}Referenced by:
RtlpAllocateHeapInternal