sub_1405BD7FC
__int64 __fastcall sub_1405BD7FC(__int64 a1, __int64 a2, __int64 a3, __int64 a4){
unsigned int v4;
VOID **v5;
size_t v6;
unsigned int *v8;
signed int v11;
unsigned int *v12;
unsigned int i;
__int64 v14;
unsigned int *v15;
unsigned int v16;
unsigned int *v17;
unsigned int *v18;
unsigned int j;
__int64 v20;
unsigned int *v21;
unsigned int v22;
size_t *v23;
int v24;
VOID **PoolWithTag;
VOID **v26;
int v27;
unsigned int v28;
unsigned int v29;
unsigned int v30;
unsigned int v31;
int v32;
unsigned int v33;
unsigned int v34;
VOID **v35;
__int64 v36;
int v37;
int v38;
unsigned int v39;
int v40;
unsigned int v41;
unsigned int v42;
_DWORD *v43;
unsigned int v44;
__int64 v45;
unsigned int v46;
int v47;
unsigned int v48;
unsigned int v49;
unsigned __int64 v50;
unsigned int v51;
__int64 v52;
int v53;
unsigned int v54;
unsigned int v55;
__int64 v56;
unsigned int v57;
int v58;
unsigned int v59;
unsigned int v60;
size_t *v61;
unsigned int v62;
unsigned int v63;
_DWORD *k;
unsigned int v65;
__int64 v67;
int v68;
v4 = 0;
v5 = 0i64;
v67 = 0i64;
v6 = 0;
v68 = 0;
v8 = *(unsigned int **)(a1 + 8);
if( v8 && *(_DWORD *)a1 > 3u )
{
v12 = *(unsigned int **)(a1 + 8);
for( i = 0; i < 3; ++i )
{
v14 = *v12;
v15 = v12 + 1;
if( v12 + 1 < v12 )
goto LABEL_14;
v12 = (unsigned int *)((char *)v15 + v14);
if( (unsigned int *)((char *)v15 + v14) < v15 )
goto LABEL_14;
}
v16 = *v12;
v17 = v12 + 1;
if( v12 + 1 < v12 )
{
LABEL_14:
v11 = -1073741675;
goto LABEL_15;
}
v18 = 0i64;
if( v16 )
v18 = v17;
v11 = 0;
if( v16 == 8 )
{
v67 = *(_QWORD *)v18;
goto LABEL_15;
}
return(unsigned int)-1073741789;
}
v11 = -1073741811;
LABEL_15:
if( v11 >= 0 )
{
if( v8 && *(_DWORD *)a1 > 4u )
{
for( j = 0; j < 4; ++j )
{
v20 = *v8;
v21 = v8 + 1;
if( v8 + 1 < v8 )
goto LABEL_28;
v8 = (unsigned int *)((char *)v21 + v20);
if( (unsigned int *)((char *)v21 + v20) < v21 )
goto LABEL_28;
}
v22 = *v8;
if( v8 + 1 < v8 )
{
LABEL_28:
v11 = -1073741675;
goto LABEL_29;
}
v23 = 0i64;
if( v22 )
v23 = v8 + 1;
v11 = 0;
if( v22 == 4 )
{
v6 = *v23;
goto LABEL_29;
}
return(unsigned int)-1073741789;
}
v11 = -1073741811;
LABEL_29:
if( v11 >= 0 )
{
if( v6 )
{
v24 = 0;
PoolWithTag = ExAllocatePoolWithTag(1ui64, v6, 542329939i64);
v5 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
memset(PoolWithTag, 0i64, v6);
}
else
{
v24 = 1;
}
if( qword_140D2C478 )
{
v26 = 0i64;
if( !v24 )
v26 = v5;
v27 = qword_140D2C478(v26, v6, &v68);
}
else
{
v27 = -1073741637;
}
v28 = v6 + 4;
if( v6 >= 0xFFFFFFFC )
{
v11 = -1073741675;
}
else
{
if( v28 >= 0xFFFFFFEC || (v4 = v6 + 32, v6 + 32 < v6 + 24) )
{
v11 = -1073741675;
goto LABEL_132;
}
v11 = 0;
}
if( v11 < 0 )
{
LABEL_132:
if( v5 )
ExFreeHeapPool(v5);
return(unsigned int)v11;
}
v29 = 0;
if( v4 >= 0xFFFFFFF8 )
{
v11 = -1073741675;
goto LABEL_132;
}
v30 = (v4 + 15) & 0xFFFFFFF8;
if( v30 >= v4 + 8 )
{
v29 = v30 + 8;
if( v30 + 8 < v30 )
{
v11 = -1073741675;
goto LABEL_58;
}
v11 = 0;
}
else
{
v11 = -1073741675;
}
if( v11 >= 0 )
{
v31 = v29 + 4;
v32 = *(_DWORD *)(a2 + 16);
v33 = v29 + 8;
if( v33 < v31 || (v34 = v33 + v32, v33 + v32 < v33) || v34 + 4 < v34 )
v11 = -1073741675;
else
v11 = v34 + 4 + *(_DWORD *)(a2 + 32) < v34 + 4 ? 0xC0000095 : 0;
}
LABEL_58:
if( v11 < 0 )
goto LABEL_132;
if( !a4 )
{
v11 = -1073741811;
goto LABEL_132;
}
v11 = 0;
*(_DWORD *)(a4 + 4) = v4;
if( v4 )
{
v35 = ExAllocatePoolWithTag(1ui64, v4, 542329939i64);
if( v35 )
{
*(_QWORD *)(a4 + 8) = v35;
*(_DWORD *)a4 = 0;
}
else
{
v11 = -1073741801;
}
}
else
{
v11 = -1073741762;
}
if( v11 < 0 )
goto LABEL_132;
v36 = *(_QWORD *)(a4 + 8);
v37 = v27 | 0x10000000;
v38 = -1;
if( v36 )
{
v42 = 0;
v43 = *(_DWORD **)(a4 + 8);
if( *(_DWORD *)a4 )
{
while( 1 )
{
v44 = *v43 + 4;
if( *v43 >= 0xFFFFFFFC )
break;
if( (_DWORD *)((char *)v43 + v44) < v43 )
goto LABEL_131;
++v42;
v43 = (_DWORD *)((char *)v43 + v44);
if( v42 >= *(_DWORD *)a4 )
goto LABEL_78;
}
v11 = -1073741675;
}
else
{
LABEL_78:
if( v43 + 1 < v43 )
goto LABEL_131;
v11 = 0;
if( (unsigned __int64)(v43 + 2) > v36 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_80;
*v43 = 4;
v43[1] = v37;
++*(_DWORD *)a4;
}
}
else
{
v39 = *(_DWORD *)(a4 + 4);
v40 = -1;
v41 = v39 + 8;
if( v39 + 8 >= v39 )
v40 = v39 + 8;
v11 = v41 < v39 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v40;
if( v41 >= v39 )
{
++*(_DWORD *)a4;
goto LABEL_84;
}
}
if( v11 < 0 )
goto LABEL_132;
LABEL_84:
v45 = *(_QWORD *)(a4 + 8);
if( v45 )
{
v49 = 0;
v50 = *(_QWORD *)(a4 + 8);
if( *(_DWORD *)a4 )
{
while( 1 )
{
v51 = *(_DWORD *)v50 + 4;
if( *(_DWORD *)v50 >= 0xFFFFFFFC )
break;
if( v50 + v51 < v50 )
goto LABEL_131;
++v49;
v50 += v51;
if( v49 >= *(_DWORD *)a4 )
goto LABEL_93;
}
v11 = -1073741675;
}
else
{
LABEL_93:
if( v50 + 4 < v50 )
goto LABEL_131;
v11 = 0;
if( v50 + 12 > v45 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_80;
*(_DWORD *)v50 = 8;
*(_QWORD *)(v50 + 4) = v67;
++*(_DWORD *)a4;
}
}
else
{
v46 = *(_DWORD *)(a4 + 4);
v47 = -1;
v48 = v46 + 12;
if( v46 + 12 >= v46 )
v47 = v46 + 12;
v11 = v48 < v46 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v47;
if( v48 >= v46 )
{
++*(_DWORD *)a4;
goto LABEL_97;
}
}
if( v11 < 0 )
goto LABEL_132;
LABEL_97:
if( v5 )
{
if( !v6 )
goto LABEL_99;
}
else if( v6 )
{
LABEL_99:
v11 = -1073741811;
goto LABEL_100;
}
v56 = *(_QWORD *)(a4 + 8);
if( v56 )
{
v60 = 0;
v61 = *(size_t **)(a4 + 8);
if( !*(_DWORD *)a4 )
{
LABEL_119:
if( v61 + 1 < v61 )
goto LABEL_131;
v11 = 0;
if( (unsigned __int64)v61 + v6 + 4 > v56 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_80;
*v61 = v6;
if( v5 )
memmove(v61 + 1, v5, v6);
++*(_DWORD *)a4;
goto LABEL_100;
}
while( 1 )
{
v62 = *v61 + 4;
if( *v61 >= 0xFFFFFFFC )
break;
if( (size_t *)((char *)v61 + v62) < v61 )
goto LABEL_131;
++v60;
v61 = (size_t *)((char *)v61 + v62);
if( v60 >= *(_DWORD *)a4 )
goto LABEL_119;
}
}
else if( v28 >= 4 )
{
v57 = *(_DWORD *)(a4 + 4);
v58 = -1;
v59 = v57 + v28;
if( v57 + v28 >= v57 )
v58 = v57 + v28;
v11 = v59 < v57 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v58;
if( v59 >= v57 )
{
++*(_DWORD *)a4;
goto LABEL_101;
}
LABEL_100:
if( v11 < 0 )
goto LABEL_132;
LABEL_101:
v52 = *(_QWORD *)(a4 + 8);
v53 = v68;
if( !v52 )
{
v54 = *(_DWORD *)(a4 + 4);
v55 = v54 + 8;
if( v54 + 8 >= v54 )
v38 = v54 + 8;
v11 = v55 < v54 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v38;
if( v55 >= v54 )
{
++*(_DWORD *)a4;
v11 = 0;
}
goto LABEL_132;
}
v63 = 0;
for( k = *(_DWORD **)(a4 + 8); v63 < *(_DWORD *)a4; k = (_DWORD *)((char *)k + v65) )
{
v65 = *k + 4;
if( *k >= 0xFFFFFFFC || (_DWORD *)((char *)k + v65) < k )
goto LABEL_131;
++v63;
}
if( k + 1 >= k )
{
v11 = 0;
if( (unsigned __int64)(k + 2) <= v52 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
{
*k = 4;
k[1] = v53;
++*(_DWORD *)a4;
goto LABEL_132;
}
LABEL_80:
v11 = -1073741789;
goto LABEL_132;
}
LABEL_131:
v11 = -1073741675;
goto LABEL_132;
}
v11 = -1073741675;
goto LABEL_100;
}
}
return(unsigned int)v11;
}Referenced by:
sub_1405F50F8