sub_1409601E0
__int64 __fastcall sub_1409601E0(__int64 a1, __int64 a2, __int64 a3, __int64 a4){
int v4;
unsigned int v7;
unsigned int *v8;
size_t v9;
signed int v10;
unsigned int *v11;
unsigned int i;
__int64 v13;
unsigned int *v14;
unsigned int v15;
__int64 *v16;
__int64 *v17;
unsigned int v18;
unsigned int *v19;
unsigned int j;
__int64 v21;
unsigned int *v22;
unsigned int v23;
unsigned int *v24;
unsigned int *v25;
unsigned int k;
__int64 v27;
unsigned int *v28;
unsigned int v29;
unsigned int *v30;
unsigned int m;
__int64 v32;
unsigned int *v33;
unsigned int v34;
size_t *v35;
size_t v36;
VOID **PoolWithTag;
VOID *v38;
int v39;
unsigned int v40;
unsigned int v41;
unsigned int v42;
int v43;
unsigned int v44;
unsigned int v45;
unsigned int v46;
VOID **v47;
__int64 v48;
int v49;
int v50;
unsigned int v51;
int v52;
unsigned int v53;
unsigned int v54;
_DWORD *v55;
unsigned int v56;
__int64 v57;
unsigned int v58;
int v59;
unsigned int v60;
unsigned int v61;
unsigned __int64 v62;
unsigned int v63;
__int64 v64;
VOID *v65;
__int64 v66;
int v67;
unsigned int v68;
unsigned int v69;
__int64 v70;
unsigned int v71;
int v72;
unsigned int v73;
unsigned int v74;
size_t *v75;
unsigned int v76;
unsigned int v77;
_DWORD *n;
unsigned int v79;
int v81;
VOID *Src;
__int64 v83;
size_t Size;
v4 = 0;
v83 = 0i64;
Size = 0;
v7 = 0;
v8 = *(unsigned int **)(a1 + 8);
v9 = 0;
Src = 0i64;
v81 = 0;
if( v8 && *(_DWORD *)a1 > 3u )
{
v11 = v8;
for( i = 0; i < 3; ++i )
{
v13 = *v11;
v14 = v11 + 1;
if( v11 + 1 < v11 )
goto LABEL_14;
v11 = (unsigned int *)((char *)v14 + v13);
if( (unsigned int *)((char *)v14 + v13) < v14 )
goto LABEL_14;
}
v15 = *v11;
v16 = (__int64 *)(v11 + 1);
if( v11 + 1 < v11 )
{
LABEL_14:
v10 = -1073741675;
}
else
{
v17 = 0i64;
if( v15 )
v17 = v16;
v10 = 0;
if( v15 != 8 )
return(unsigned int)-1073741789;
v83 = *v17;
}
}
else
{
v10 = -1073741811;
}
if( v10 < 0 )
return(unsigned int)v10;
if( !v8 )
return(unsigned int)-1073741811;
v18 = *(_DWORD *)a1;
if( *(_DWORD *)a1 <= 4u )
return(unsigned int)-1073741811;
v19 = v8;
for( j = 0; j < 4; ++j )
{
v21 = *v19;
v22 = v19 + 1;
if( v19 + 1 < v19 )
return(unsigned int)-1073741675;
v19 = (unsigned int *)((char *)v22 + v21);
if( (unsigned int *)((char *)v22 + v21) < v22 )
return(unsigned int)-1073741675;
}
v23 = *v19;
if( v19 + 1 < v19 )
return(unsigned int)-1073741675;
v24 = 0i64;
if( v23 )
v24 = v19 + 1;
if( v18 <= 5 )
return(unsigned int)-1073741811;
v25 = v8;
for( k = 0; k < 5; ++k )
{
v27 = *v25;
v28 = v25 + 1;
if( v25 + 1 < v25 )
return(unsigned int)-1073741675;
v25 = (unsigned int *)((char *)v28 + v27);
if( (unsigned int *)((char *)v28 + v27) < v28 )
return(unsigned int)-1073741675;
}
v29 = *v25;
if( v25 + 1 < v25 )
return(unsigned int)-1073741675;
v30 = 0i64;
if( v29 )
v30 = v25 + 1;
if( v18 > 6 )
{
for( m = 0; m < 6; ++m )
{
v32 = *v8;
v33 = v8 + 1;
if( v8 + 1 < v8 )
goto LABEL_45;
v8 = (unsigned int *)((char *)v33 + v32);
if( (unsigned int *)((char *)v33 + v32) < v33 )
goto LABEL_45;
}
v34 = *v8;
if( v8 + 1 < v8 )
{
LABEL_45:
v10 = -1073741675;
goto LABEL_46;
}
v35 = 0i64;
if( v34 )
v35 = v8 + 1;
v10 = 0;
if( v34 == 4 )
{
v9 = *v35;
Size = *v35;
goto LABEL_46;
}
return(unsigned int)-1073741789;
}
v10 = -1073741811;
LABEL_46:
if( v10 >= 0 )
{
if( v9 )
{
v36 = v9;
PoolWithTag = ExAllocatePoolWithTag(1ui64, v9, 542329939i64);
Src = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
memset(PoolWithTag, 0i64, v36);
v9 = Size;
}
else
{
v4 = 1;
}
if( qword_140D2C448 )
{
v38 = 0i64;
if( !v4 )
v38 = Src;
v39 = qword_140D2C448(v24, v23, v30, v29, v38, v9, &v81);
}
else
{
v39 = -1073741637;
}
v40 = Size + 4;
if( Size >= 0xFFFFFFFC )
{
v10 = -1073741675;
}
else
{
if( v40 >= 0xFFFFFFEC || (v7 = Size + 32, Size + 32 < Size + 24) )
{
v10 = -1073741675;
goto LABEL_147;
}
v10 = 0;
}
if( v10 < 0 )
{
LABEL_147:
if( Src )
ExFreePoolWithTag(Src, 0x20534C53u);
return(unsigned int)v10;
}
v41 = 0;
if( v7 >= 0xFFFFFFF8 )
goto LABEL_146;
v42 = (v7 + 15) & 0xFFFFFFF8;
if( v42 >= v7 + 8 )
{
v41 = v42 + 8;
if( v42 + 8 < v42 )
goto LABEL_74;
v10 = 0;
}
else
{
v10 = -1073741675;
}
if( v10 < 0 )
goto LABEL_147;
v43 = *(_DWORD *)(a2 + 16);
v44 = v41 + 4;
v45 = v41 + 8;
if( v45 >= v44 )
{
v46 = v45 + v43;
if( v45 + v43 >= v45 && v46 + 4 >= v46 )
{
v10 = v46 + 4 + *(_DWORD *)(a2 + 32) < v46 + 4 ? 0xC0000095 : 0;
goto LABEL_75;
}
}
LABEL_74:
v10 = -1073741675;
LABEL_75:
if( v10 < 0 )
goto LABEL_147;
if( !a4 )
{
v10 = -1073741811;
goto LABEL_147;
}
v10 = 0;
*(_DWORD *)(a4 + 4) = v7;
if( v7 )
{
v47 = ExAllocatePoolWithTag(1ui64, v7, 542329939i64);
if( v47 )
{
*(_QWORD *)(a4 + 8) = v47;
*(_DWORD *)a4 = 0;
}
else
{
v10 = -1073741801;
}
}
else
{
v10 = -1073741762;
}
if( v10 < 0 )
goto LABEL_147;
v48 = *(_QWORD *)(a4 + 8);
v49 = v39 | 0x10000000;
v50 = -1;
if( v48 )
{
v54 = 0;
v55 = *(_DWORD **)(a4 + 8);
if( *(_DWORD *)a4 )
{
while( 1 )
{
v56 = *v55 + 4;
if( *v55 >= 0xFFFFFFFC )
break;
if( (_DWORD *)((char *)v55 + v56) < v55 )
goto LABEL_146;
++v54;
v55 = (_DWORD *)((char *)v55 + v56);
if( v54 >= *(_DWORD *)a4 )
goto LABEL_93;
}
v10 = -1073741675;
}
else
{
LABEL_93:
if( v55 + 1 < v55 )
goto LABEL_146;
v10 = 0;
if( (unsigned __int64)(v55 + 2) > v48 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_95;
*v55 = 4;
v55[1] = v49;
++*(_DWORD *)a4;
}
}
else
{
v51 = *(_DWORD *)(a4 + 4);
v52 = -1;
v53 = v51 + 8;
if( v51 + 8 >= v51 )
v52 = v51 + 8;
v10 = v53 < v51 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v52;
if( v53 >= v51 )
{
++*(_DWORD *)a4;
goto LABEL_99;
}
}
if( v10 < 0 )
goto LABEL_147;
LABEL_99:
v57 = *(_QWORD *)(a4 + 8);
if( v57 )
{
v61 = 0;
v62 = *(_QWORD *)(a4 + 8);
if( *(_DWORD *)a4 )
{
while( 1 )
{
v63 = *(_DWORD *)v62 + 4;
if( *(_DWORD *)v62 >= 0xFFFFFFFC )
break;
if( v62 + v63 < v62 )
goto LABEL_146;
++v61;
v62 += v63;
if( v61 >= *(_DWORD *)a4 )
goto LABEL_108;
}
v10 = -1073741675;
}
else
{
LABEL_108:
if( v62 + 4 < v62 )
goto LABEL_146;
v10 = 0;
if( v62 + 12 > v57 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_95;
v64 = v83;
*(_DWORD *)v62 = 8;
*(_QWORD *)(v62 + 4) = v64;
++*(_DWORD *)a4;
}
}
else
{
v58 = *(_DWORD *)(a4 + 4);
v59 = -1;
v60 = v58 + 12;
if( v58 + 12 >= v58 )
v59 = v58 + 12;
v10 = v60 < v58 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v59;
if( v60 >= v58 )
{
++*(_DWORD *)a4;
goto LABEL_112;
}
}
if( v10 < 0 )
goto LABEL_147;
LABEL_112:
v65 = Src;
if( Src )
{
if( !Size )
goto LABEL_114;
}
else if( Size )
{
LABEL_114:
v10 = -1073741811;
goto LABEL_115;
}
v70 = *(_QWORD *)(a4 + 8);
if( v70 )
{
v74 = 0;
v75 = *(size_t **)(a4 + 8);
if( !*(_DWORD *)a4 )
{
LABEL_134:
if( v75 + 1 < v75 )
goto LABEL_146;
v10 = 0;
if( (unsigned __int64)v75 + Size + 4 > v70 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_95;
*v75 = Size;
if( v65 )
memmove(v75 + 1, v65, Size);
++*(_DWORD *)a4;
goto LABEL_115;
}
while( 1 )
{
v76 = *v75 + 4;
if( *v75 >= 0xFFFFFFFC )
break;
if( (size_t *)((char *)v75 + v76) < v75 )
goto LABEL_146;
++v74;
v75 = (size_t *)((char *)v75 + v76);
if( v74 >= *(_DWORD *)a4 )
goto LABEL_134;
}
}
else if( v40 >= 4 )
{
v71 = *(_DWORD *)(a4 + 4);
v72 = -1;
v73 = v71 + v40;
if( v71 + v40 >= v71 )
v72 = v71 + v40;
v10 = v73 < v71 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v72;
if( v73 >= v71 )
{
++*(_DWORD *)a4;
goto LABEL_116;
}
LABEL_115:
if( v10 < 0 )
goto LABEL_147;
LABEL_116:
v66 = *(_QWORD *)(a4 + 8);
v67 = v81;
if( !v66 )
{
v68 = *(_DWORD *)(a4 + 4);
v69 = v68 + 8;
if( v68 + 8 >= v68 )
v50 = v68 + 8;
v10 = v69 < v68 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v50;
if( v69 >= v68 )
{
++*(_DWORD *)a4;
v10 = 0;
}
goto LABEL_147;
}
v77 = 0;
for( n = *(_DWORD **)(a4 + 8); v77 < *(_DWORD *)a4; n = (_DWORD *)((char *)n + v79) )
{
v79 = *n + 4;
if( *n >= 0xFFFFFFFC || (_DWORD *)((char *)n + v79) < n )
goto LABEL_146;
++v77;
}
if( n + 1 >= n )
{
v10 = 0;
if( (unsigned __int64)(n + 2) <= v66 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
{
*n = 4;
n[1] = v67;
++*(_DWORD *)a4;
goto LABEL_147;
}
LABEL_95:
v10 = -1073741789;
goto LABEL_147;
}
LABEL_146:
v10 = -1073741675;
goto LABEL_147;
}
v10 = -1073741675;
goto LABEL_115;
}
return(unsigned int)v10;
}Referenced by:
sub_1405F50F8