sub_140960810
INT64 __fastcall sub_140960810(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
int v4;
unsigned int v7;
unsigned int v8;
unsigned int *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 j;
__int64 v20;
unsigned int *v21;
unsigned int v22;
unsigned int *v23;
unsigned int *v24;
unsigned int v25;
unsigned int *v26;
unsigned int k;
__int64 v28;
unsigned int *v29;
unsigned int v30;
unsigned int *v31;
unsigned int *v32;
unsigned int m;
__int64 v34;
unsigned int *v35;
unsigned int v36;
unsigned int *v37;
unsigned int n;
__int64 v39;
unsigned int *v40;
unsigned int v41;
unsigned int *v42;
void *PoolWithTag;
void *v44;
int v45;
unsigned int v46;
unsigned int v47;
unsigned int v48;
int v49;
unsigned int v50;
unsigned int v51;
unsigned int v52;
VOID *v53;
__int64 v54;
int v55;
int v56;
unsigned int v57;
int v58;
unsigned int v59;
unsigned int v60;
_DWORD *v61;
unsigned int v62;
__int64 v63;
unsigned int v64;
int v65;
unsigned int v66;
unsigned int v67;
unsigned __int64 v68;
unsigned int v69;
__int64 v70;
UINT8 *v71;
__int64 v72;
int v73;
unsigned int v74;
unsigned int v75;
__int64 v76;
unsigned int v77;
int v78;
unsigned int v79;
unsigned int v80;
unsigned __int64 v81;
unsigned int v82;
unsigned int v83;
_DWORD *ii;
unsigned int v85;
unsigned int v87;
int v88;
void *Src;
__int64 v90;
unsigned int Size;
v4 = 0;
v90 = 0i64;
v87 = 0;
v7 = 0;
Size = 0;
v8 = 0;
v9 = *(unsigned int **)(a1 + 8);
Src = 0i64;
v88 = 0;
if( v9 && *(_DWORD *)a1 > 3u )
{
v11 = v9;
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;
v90 = *v17;
}
}
else
{
v10 = -1073741811;
}
if( v10 < 0 )
return(unsigned int)v10;
if( v9 && *(_DWORD *)a1 > 4u )
{
v18 = v9;
for( j = 0; j < 4; ++j )
{
v20 = *v18;
v21 = v18 + 1;
if( v18 + 1 < v18 )
goto LABEL_28;
v18 = (unsigned int *)((char *)v21 + v20);
if( (unsigned int *)((char *)v21 + v20) < v21 )
goto LABEL_28;
}
v22 = *v18;
v23 = v18 + 1;
if( v18 + 1 < v18 )
{
LABEL_28:
v10 = -1073741675;
}
else
{
v24 = 0i64;
if( v22 )
v24 = v23;
v10 = 0;
if( v22 != 4 )
return(unsigned int)-1073741789;
v87 = *v24;
}
}
else
{
v10 = -1073741811;
}
if( v10 < 0 )
return(unsigned int)v10;
if( !v9 )
return(unsigned int)-1073741811;
v25 = *(_DWORD *)a1;
if( *(_DWORD *)a1 <= 5u )
return(unsigned int)-1073741811;
v26 = v9;
for( k = 0; k < 5; ++k )
{
v28 = *v26;
v29 = v26 + 1;
if( v26 + 1 < v26 )
return(unsigned int)-1073741675;
v26 = (unsigned int *)((char *)v29 + v28);
if( (unsigned int *)((char *)v29 + v28) < v29 )
return(unsigned int)-1073741675;
}
v30 = *v26;
if( v26 + 1 < v26 )
return(unsigned int)-1073741675;
v31 = 0i64;
if( v30 )
v31 = v26 + 1;
if( v25 <= 6 )
return(unsigned int)-1073741811;
v32 = v9;
for( m = 0; m < 6; ++m )
{
v34 = *v32;
v35 = v32 + 1;
if( v32 + 1 < v32 )
return(unsigned int)-1073741675;
v32 = (unsigned int *)((char *)v35 + v34);
if( (unsigned int *)((char *)v35 + v34) < v35 )
return(unsigned int)-1073741675;
}
v36 = *v32;
if( v32 + 1 < v32 )
return(unsigned int)-1073741675;
v37 = 0i64;
if( v36 )
v37 = v32 + 1;
if( v25 > 7 )
{
for( n = 0; n < 7; ++n )
{
v39 = *v9;
v40 = v9 + 1;
if( v9 + 1 < v9 )
goto LABEL_59;
v9 = (unsigned int *)((char *)v40 + v39);
if( (unsigned int *)((char *)v40 + v39) < v40 )
goto LABEL_59;
}
v41 = *v9;
if( v9 + 1 < v9 )
{
LABEL_59:
v10 = -1073741675;
goto LABEL_60;
}
v42 = 0i64;
if( v41 )
v42 = v9 + 1;
v10 = 0;
if( v41 == 4 )
{
v8 = *v42;
Size = *v42;
goto LABEL_60;
}
return(unsigned int)-1073741789;
}
v10 = -1073741811;
LABEL_60:
if( v10 >= 0 )
{
if( v8 )
{
PoolWithTag = ExAllocatePoolWithTag(PagedPool, v8, 0x20534C53ui64);
Src = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
memset((INT64)PoolWithTag, 0i64);
v8 = Size;
}
else
{
v4 = 1;
}
if( qword_140D2C450 )
{
v44 = 0i64;
if( !v4 )
v44 = Src;
v45 = qword_140D2C450(v87, v31, v30, v37, v36, v44, v8, &v88);
}
else
{
v45 = -1073741637;
}
v46 = Size + 4;
if( Size >= 0xFFFFFFFC )
{
v10 = -1073741675;
}
else
{
if( v46 >= 0xFFFFFFEC || (v7 = Size + 32, Size + 32 < Size + 24) )
{
v10 = -1073741675;
goto LABEL_161;
}
v10 = 0;
}
if( v10 < 0 )
{
LABEL_161:
if( Src )
ExFreePoolWithTag(Src, 0x20534C53u);
return(unsigned int)v10;
}
v47 = 0;
if( v7 >= 0xFFFFFFF8 )
goto LABEL_160;
v48 = (v7 + 15) & 0xFFFFFFF8;
if( v48 >= v7 + 8 )
{
v47 = v48 + 8;
if( v48 + 8 < v48 )
goto LABEL_88;
v10 = 0;
}
else
{
v10 = -1073741675;
}
if( v10 < 0 )
goto LABEL_161;
v49 = *(_DWORD *)(a2 + 16);
v50 = v47 + 4;
v51 = v47 + 8;
if( v51 >= v50 )
{
v52 = v51 + v49;
if( v51 + v49 >= v51 && v52 + 4 >= v52 )
{
v10 = v52 + 4 + *(_DWORD *)(a2 + 32) < v52 + 4 ? 0xC0000095 : 0;
goto LABEL_89;
}
}
LABEL_88:
v10 = -1073741675;
LABEL_89:
if( v10 < 0 )
goto LABEL_161;
if( !a4 )
{
v10 = -1073741811;
goto LABEL_161;
}
v10 = 0;
*(_DWORD *)(a4 + 4) = v7;
if( v7 )
{
v53 = ExAllocatePoolWithTag(PagedPool, v7, 0x20534C53ui64);
if( v53 )
{
*(_QWORD *)(a4 + 8) = v53;
*(_DWORD *)a4 = 0;
}
else
{
v10 = -1073741801;
}
}
else
{
v10 = -1073741762;
}
if( v10 < 0 )
goto LABEL_161;
v54 = *(_QWORD *)(a4 + 8);
v55 = v45 | 0x10000000;
v56 = -1;
if( v54 )
{
v60 = 0;
v61 = *(_DWORD **)(a4 + 8);
if( *(_DWORD *)a4 )
{
while( 1 )
{
v62 = *v61 + 4;
if( *v61 >= 0xFFFFFFFC )
break;
if( (_DWORD *)((char *)v61 + v62) < v61 )
goto LABEL_160;
++v60;
v61 = (_DWORD *)((char *)v61 + v62);
if( v60 >= *(_DWORD *)a4 )
goto LABEL_107;
}
v10 = -1073741675;
}
else
{
LABEL_107:
if( v61 + 1 < v61 )
goto LABEL_160;
v10 = 0;
if( (unsigned __int64)(v61 + 2) > v54 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_109;
*v61 = 4;
v61[1] = v55;
++*(_DWORD *)a4;
}
}
else
{
v57 = *(_DWORD *)(a4 + 4);
v58 = -1;
v59 = v57 + 8;
if( v57 + 8 >= v57 )
v58 = v57 + 8;
v10 = v59 < v57 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v58;
if( v59 >= v57 )
{
++*(_DWORD *)a4;
goto LABEL_113;
}
}
if( v10 < 0 )
goto LABEL_161;
LABEL_113:
v63 = *(_QWORD *)(a4 + 8);
if( v63 )
{
v67 = 0;
v68 = *(_QWORD *)(a4 + 8);
if( *(_DWORD *)a4 )
{
while( 1 )
{
v69 = *(_DWORD *)v68 + 4;
if( *(_DWORD *)v68 >= 0xFFFFFFFC )
break;
if( v68 + v69 < v68 )
goto LABEL_160;
++v67;
v68 += v69;
if( v67 >= *(_DWORD *)a4 )
goto LABEL_122;
}
v10 = -1073741675;
}
else
{
LABEL_122:
if( v68 + 4 < v68 )
goto LABEL_160;
v10 = 0;
if( v68 + 12 > v63 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_109;
v70 = v90;
*(_DWORD *)v68 = 8;
*(_QWORD *)(v68 + 4) = v70;
++*(_DWORD *)a4;
}
}
else
{
v64 = *(_DWORD *)(a4 + 4);
v65 = -1;
v66 = v64 + 12;
if( v64 + 12 >= v64 )
v65 = v64 + 12;
v10 = v66 < v64 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v65;
if( v66 >= v64 )
{
++*(_DWORD *)a4;
goto LABEL_126;
}
}
if( v10 < 0 )
goto LABEL_161;
LABEL_126:
v71 = (UINT8 *)Src;
if( Src )
{
if( !Size )
goto LABEL_128;
}
else if( Size )
{
LABEL_128:
v10 = -1073741811;
goto LABEL_129;
}
v76 = *(_QWORD *)(a4 + 8);
if( v76 )
{
v80 = 0;
v81 = *(_QWORD *)(a4 + 8);
if( !*(_DWORD *)a4 )
{
LABEL_148:
if( v81 + 4 < v81 )
goto LABEL_160;
v10 = 0;
if( v81 + Size + 4i64 > v76 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_109;
*(_DWORD *)v81 = Size;
if( v71 )
memmove((UINT8 *)(v81 + 4), v71, Size);
++*(_DWORD *)a4;
goto LABEL_129;
}
while( 1 )
{
v82 = *(_DWORD *)v81 + 4;
if( *(_DWORD *)v81 >= 0xFFFFFFFC )
break;
if( v81 + v82 < v81 )
goto LABEL_160;
++v80;
v81 += v82;
if( v80 >= *(_DWORD *)a4 )
goto LABEL_148;
}
}
else if( v46 >= 4 )
{
v77 = *(_DWORD *)(a4 + 4);
v78 = -1;
v79 = v77 + v46;
if( v77 + v46 >= v77 )
v78 = v77 + v46;
v10 = v79 < v77 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v78;
if( v79 >= v77 )
{
++*(_DWORD *)a4;
goto LABEL_130;
}
LABEL_129:
if( v10 < 0 )
goto LABEL_161;
LABEL_130:
v72 = *(_QWORD *)(a4 + 8);
v73 = v88;
if( !v72 )
{
v74 = *(_DWORD *)(a4 + 4);
v75 = v74 + 8;
if( v74 + 8 >= v74 )
v56 = v74 + 8;
v10 = v75 < v74 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v56;
if( v75 >= v74 )
{
++*(_DWORD *)a4;
v10 = 0;
}
goto LABEL_161;
}
v83 = 0;
for( ii = *(_DWORD **)(a4 + 8); v83 < *(_DWORD *)a4; ii = (_DWORD *)((char *)ii + v85) )
{
v85 = *ii + 4;
if( *ii >= 0xFFFFFFFC || (_DWORD *)((char *)ii + v85) < ii )
goto LABEL_160;
++v83;
}
if( ii + 1 >= ii )
{
v10 = 0;
if( (unsigned __int64)(ii + 2) <= v72 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
{
*ii = 4;
ii[1] = v73;
++*(_DWORD *)a4;
goto LABEL_161;
}
LABEL_109:
v10 = -1073741789;
goto LABEL_161;
}
LABEL_160:
v10 = -1073741675;
goto LABEL_161;
}
v10 = -1073741675;
goto LABEL_129;
}
return(unsigned int)v10;
}Referenced by:
sub_1405F50F8