sub_140963C98
__int64 __fastcall sub_140963C98(INT64 *a1, INT64 a2, _DWORD *a3){
int v4;
int v6;
void *v7;
_DWORD *v8;
int v9;
INT64 v11;
INT64 v12;
int v13;
PMDL Mdl;
char v15;
INT64 v16;
v16 = 0i64;
Mdl = 0i64;
v4 = a2;
v15 = 0;
if( (_DWORD)a2 && (*a3 & 1) != 0 )
{
v6 = 0;
}
else
{
v7 = (void *)(a1[4] + (a3[1] & 0xFFFFFFF));
v6 = sub_14065E218(v7, a3[2] & 0xFFFFFFF, (*a3 & 2) == 0);
if( v6 >= 0 )
{
v6 = sub_1405D28BC(v7, a3[2] & 0xFFFFFFF, (*a3 & 2) == 0, &Mdl, (UINT64 *)&v16);
if( v6 >= 0 )
{
v8 = (_DWORD *)v16;
if( !v4
|| (LODWORD(v11) = a3[2] & 0xFFFFFFF,
v6 = ApplyRelocations(
a1[5],
*(unsigned int *)(a1[7] + 48),
a1[4],
*(_QWORD *)(a1[7] + 56) - a1[4],
(INT64)v7,
v16,
v11),
v6 >= 0) )
{
memmove(v8, v7, a3[2] & 0xFFFFFFF);
if( (*a3 & 2) != 0 || (a3[2] & 0xFFFFFFFu) >= 4 )
{
if( (*a3 & 2) == 0 )
*v8 = a3[3];
v6 = sub_14065F78C(
0,
v8,
(char *)v8,
a3[2] & 0xFFFFFFF,
(__int64 *)(a1[7] + 72),
a3[1] & 0xFFFFFFF,
(__int128 *)(a1[7] + 80),
v13,
&v15);
if( v6 >= 0 )
{
if( !v4
|| (LODWORD(v12) = a3[2] & 0xFFFFFFF,
v6 = ApplyRelocations(
a1[5],
*(unsigned int *)(a1[7] + 48),
a1[4],
a1[4] - *(_QWORD *)(a1[7] + 56),
(INT64)v7,
(INT64)v8,
v12),
v6 >= 0) )
{
ZwFlushInstructionCache();
v6 = v9;
}
}
}
else
{
v6 = -1073741811;
}
}
}
}
}
sub_14064F46C(Mdl, a2, (INT64)a3);
return(unsigned int)v6;
}Referenced by:
WbDecryptWarbirdEncryptionSegment