sub_140960EA4
INT64 __fastcall sub_140960EA4(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
signed int v7;
unsigned int *v8;
unsigned int *v9;
unsigned int i;
__int64 v11;
unsigned int *v12;
unsigned int v13;
unsigned int *v14;
unsigned int *v15;
wchar_t *v16;
size_t v17;
unsigned int j;
__int64 v19;
unsigned int *v20;
size_t v21;
unsigned int *v22;
__int64 v23;
unsigned int v24;
UINT64 v25;
UINT8 *PoolWithTag;
UINT8 *v27;
UINT8 *v28;
unsigned int *v29;
unsigned int k;
__int64 v31;
unsigned int *v32;
unsigned int v33;
unsigned int *v34;
unsigned int m;
__int64 v36;
unsigned int *v37;
unsigned int *v38;
int v39;
int v40;
unsigned int v41;
_DWORD *v42;
int v43;
unsigned int v44;
__int64 v45;
unsigned int v46;
int v47;
unsigned int v48;
unsigned __int64 v49;
unsigned int v50;
unsigned int v51;
__int64 v53;
size_t pcbLength;
v53 = 0i64;
if( !a2 || !a4 )
return(unsigned int)-1073741811;
v8 = *(unsigned int **)(a1 + 8);
if( v8 && *(_DWORD *)a1 > 3u )
{
v9 = v8;
for( i = 0; i < 3; ++i )
{
v11 = *v9;
v12 = v9 + 1;
if( v9 + 1 < v9 )
goto LABEL_17;
v9 = (unsigned int *)((char *)v12 + v11);
if( (unsigned int *)((char *)v12 + v11) < v12 )
goto LABEL_17;
}
v13 = *v9;
v14 = v9 + 1;
if( v9 + 1 < v9 )
{
LABEL_17:
v7 = -1073741675;
}
else
{
v15 = 0i64;
if( v13 )
v15 = v14;
v7 = 0;
if( v13 != 8 )
return(unsigned int)-1073741789;
v53 = *(_QWORD *)v15;
}
}
else
{
v7 = -1073741811;
}
if( v7 < 0 )
return(unsigned int)v7;
pcbLength = 0i64;
v16 = 0i64;
LODWORD(v17) = 0;
if( v8 && *(_DWORD *)a1 > 4u )
{
for( j = 0; j < 4; ++j )
{
v19 = *v8;
v20 = v8 + 1;
if( v8 + 1 < v8 )
goto LABEL_39;
v8 = (unsigned int *)((char *)v20 + v19);
if( (unsigned int *)((char *)v20 + v19) < v20 )
goto LABEL_39;
}
v21 = *v8;
if( v8 + 1 < v8 )
{
LABEL_39:
v7 = -1073741675;
}
else
{
if( (_DWORD)v21 )
v16 = (wchar_t *)(v8 + 1);
v7 = 0;
if( !(_DWORD)v21
|| (v21 & 1) != 0
|| v16[(v21 >> 1) - 1]
|| StringCbLengthW(v16, v21, &pcbLength) < 0
|| pcbLength + 2 != v23 )
{
return(unsigned int)-1073741762;
}
v17 = pcbLength >> 1;
}
}
else
{
v7 = -1073741811;
}
if( v7 < 0 )
return(unsigned int)v7;
v24 = 2 * v17 + 2;
if( 2 * (_DWORD)v17 == -2 )
return(unsigned int)-1073741762;
v25 = v24;
PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v24, 0x20534C53ui64);
v27 = PoolWithTag;
if( !PoolWithTag )
return(unsigned int)-1073741801;
memmove(PoolWithTag, (UINT8 *)v16, v25);
v28 = v27;
v22 = *(unsigned int **)(a1 + 8);
if( !v22 || *(_DWORD *)a1 <= 5u )
goto LABEL_33;
v29 = *(unsigned int **)(a1 + 8);
for( k = 0; k < 5; ++k )
{
v31 = *v29;
v32 = v29 + 1;
if( v29 + 1 < v29 )
goto LABEL_85;
v29 = (unsigned int *)((char *)v32 + v31);
if( (unsigned int *)((char *)v32 + v31) < v32 )
goto LABEL_85;
}
v33 = *v29;
if( v29 + 1 >= v29 )
{
v34 = 0i64;
if( v33 )
v34 = v29 + 1;
if( *(_DWORD *)a1 > 6u )
{
for( m = 0; m < 6; ++m )
{
v36 = *v22;
v37 = v22 + 1;
if( v22 + 1 < v22 )
goto LABEL_85;
v22 = (unsigned int *)((char *)v37 + v36);
if( (unsigned int *)((char *)v37 + v36) < v37 )
goto LABEL_85;
}
if( v22 + 1 < v22 )
goto LABEL_85;
v38 = 0i64;
if( *v22 )
v38 = v22 + 1;
if( qword_140D2C420 )
v39 = qword_140D2C420(v28, v34, v33, v38, *v22);
else
v39 = -1073741637;
v7 = v39;
if( v39 < 0 )
goto LABEL_86;
v40 = *(_DWORD *)(a2 + 32);
if( *(_DWORD *)(a2 + 16) < 0xFFFFFFD0 )
{
v41 = *(_DWORD *)(a2 + 16) + 52;
if( v41 >= *(_DWORD *)(a2 + 16) + 48 )
{
v7 = v41 + v40 < v41 ? 0xC0000095 : 0;
if( v41 + v40 < v41 )
goto LABEL_86;
*(_DWORD *)(a4 + 4) = 20;
v42 = ExAllocatePoolWithTag(PagedPool, 0x14ui64, 0x20534C53ui64);
if( !v42 )
{
v7 = -1073741801;
goto LABEL_86;
}
*(_QWORD *)(a4 + 8) = v42;
*(_DWORD *)a4 = 0;
v43 = v39 | 0x10000000;
if( v42 + 1 >= v42 )
{
if( v42 + 2 > (_DWORD *)((char *)v42 + *(unsigned int *)(a4 + 4)) )
{
LABEL_72:
v7 = -1073741789;
goto LABEL_86;
}
*v42 = 4;
v42[1] = v43;
v44 = ++*(_DWORD *)a4;
v45 = *(_QWORD *)(a4 + 8);
if( !v45 )
{
v46 = *(_DWORD *)(a4 + 4);
v47 = -1;
v48 = v46 + 12;
if( v46 + 12 >= v46 )
v47 = v46 + 12;
v7 = v48 < v46 ? 0xC0000095 : 0;
*(_DWORD *)(a4 + 4) = v47;
if( v48 >= v46 )
{
v7 = 0;
*(_DWORD *)a4 = v44 + 1;
}
goto LABEL_86;
}
v49 = *(_QWORD *)(a4 + 8);
v50 = 0;
if( v44 )
{
while( 1 )
{
v51 = *(_DWORD *)v49 + 4;
if( *(_DWORD *)v49 >= 0xFFFFFFFC || v49 + v51 < v49 )
break;
++v50;
v49 += v51;
if( v50 >= v44 )
goto LABEL_82;
}
}
else
{
LABEL_82:
if( v49 + 4 >= v49 )
{
v7 = 0;
if( v49 + 12 > v45 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
goto LABEL_72;
*(_DWORD *)v49 = 8;
*(_QWORD *)(v49 + 4) = v53;
++*(_DWORD *)a4;
goto LABEL_86;
}
}
}
}
}
goto LABEL_85;
}
LABEL_33:
v7 = -1073741811;
goto LABEL_86;
}
LABEL_85:
v7 = -1073741675;
LABEL_86:
if( v28 )
ExFreePoolWithTag(v28, 0x20534C53u);
return(unsigned int)v7;
}Referenced by:
sub_1405F50F8