sub_14095F834
__int64 __fastcall sub_14095F834(__int64 a1, __int64 a2, __int64 a3, __int64 a4){
__int64 v6;
signed int v7;
__int64 *v8;
int v9;
unsigned __int64 v10;
__int64 v11;
int v12;
unsigned __int64 v13;
unsigned __int64 v14;
__int64 v15;
int v16;
unsigned int v17;
int v18;
unsigned int v19;
unsigned int v20;
unsigned int v21;
VOID **PoolWithTag;
unsigned int v23;
__int64 v24;
unsigned int v25;
unsigned int v26;
int v27;
char *v28;
int v29;
char *v30;
char *v31;
__int64 v32;
__int64 v33;
unsigned int v34;
__int64 v35;
unsigned int v36;
unsigned int v37;
char *v38;
int v39;
char *v40;
char *v41;
char *v42;
__int64 v43;
v6 = 0i64;
if( !a1 || !a2 || !a4 )
return(unsigned int)-1073741811;
v8 = 0i64;
v9 = 0;
v10 = *(_QWORD *)(a1 + 8);
if( v10 && *(_DWORD *)a1 > 3u )
{
v12 = 0;
v11 = -1i64;
while( 1 )
{
v13 = -1i64;
if( v10 + 4 >= v10 )
v13 = v10 + 4;
v7 = v10 + 4 < v10 ? 0xC0000095 : 0;
if( v10 + 4 < v10 )
break;
v14 = v13 + *(unsigned int *)v10;
v10 = -1i64;
if( v14 >= v13 )
v10 = v14;
v7 = v14 < v13 ? 0xC0000095 : 0;
if( v14 < v13 )
break;
if( (unsigned int)++v12 >= 3 )
{
v15 = -1i64;
if( v10 + 4 >= v10 )
v15 = v10 + 4;
v7 = v10 + 4 < v10 ? 0xC0000095 : 0;
if( v10 + 4 >= v10 )
{
v9 = *(_DWORD *)v10;
if( *(_DWORD *)v10 )
v8 = (__int64 *)v15;
}
break;
}
}
}
else
{
v7 = -1073741811;
v11 = -1i64;
}
if( v7 >= 0 )
{
if( v9 == 8 )
v6 = *v8;
else
v7 = -1073741789;
if( v7 >= 0 )
{
KeReleaseMutex((_KMUTANT *)((char *)&SbiVmbusArrivalEvent + 2848), 0);
v16 = *(_DWORD *)(a2 + 32);
v17 = *(_DWORD *)(a2 + 16) + 48;
v18 = -1;
v19 = -1;
if( v17 >= 0x30 )
v19 = v17;
v7 = v17 < 0x30 ? 0xC0000095 : 0;
if( v17 >= 0x30 )
{
v20 = v19 + 4;
v21 = -1;
if( v19 + 4 >= v19 )
v21 = v19 + 4;
v7 = v20 < v19 ? 0xC0000095 : 0;
if( v20 >= v19 )
v7 = v21 + v16 < v21 ? 0xC0000095 : 0;
}
if( v7 >= 0 )
{
*(_DWORD *)(a4 + 4) = 20;
v7 = 0;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x14ui64, 542329939i64);
if( PoolWithTag )
{
*(_QWORD *)(a4 + 8) = PoolWithTag;
*(_DWORD *)a4 = 0;
}
else
{
v7 = -1073741801;
}
if( v7 >= 0 )
{
v23 = 0;
v24 = *(_QWORD *)(a4 + 8);
if( !v24 )
{
v25 = *(_DWORD *)(a4 + 4);
v26 = v25 + 8;
v27 = -1;
if( v25 + 8 >= v25 )
v27 = v25 + 8;
*(_DWORD *)(a4 + 4) = v27;
v7 = v26 < v25 ? 0xC0000095 : 0;
if( v26 >= v25 )
{
++*(_DWORD *)a4;
v7 = 0;
}
goto LABEL_58;
}
v28 = *(char **)(a4 + 8);
v29 = 0;
if( !*(_DWORD *)a4 )
{
LABEL_52:
v33 = -1i64;
if( v28 + 4 >= v28 )
v33 = (__int64)(v28 + 4);
v7 = v28 + 4 < v28 ? 0xC0000095 : 0;
if( v28 + 4 >= v28 )
{
if( (unsigned __int64)(v28 + 8) <= v24 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
{
*(_DWORD *)v28 = 4;
*(_DWORD *)v33 = 0;
++*(_DWORD *)a4;
}
else
{
v7 = -1073741789;
}
}
LABEL_58:
if( v7 >= 0 )
{
v34 = 0;
v35 = *(_QWORD *)(a4 + 8);
if( v35 )
{
v38 = *(char **)(a4 + 8);
v39 = 0;
if( *(_DWORD *)a4 )
{
while( 1 )
{
v40 = v38;
v41 = v38;
if( *(_DWORD *)v38 >= 0xFFFFFFFC )
{
v7 = -1073741675;
}
else
{
v34 = *(_DWORD *)v38 + 4;
v7 = 0;
}
if( v7 < 0 )
break;
v42 = &v38[v34];
v43 = -1i64;
if( v42 >= v38 )
v43 = (__int64)&v38[v34];
v38 = (char *)v43;
v7 = v42 < v41 ? 0xC0000095 : 0;
if( v42 < v40 )
break;
if( (unsigned int)++v39 >= *(_DWORD *)a4 )
goto LABEL_73;
}
}
else
{
LABEL_73:
if( v38 + 4 >= v38 )
v11 = (__int64)(v38 + 4);
v7 = v38 + 4 < v38 ? 0xC0000095 : 0;
if( v38 + 4 >= v38 )
{
if( (unsigned __int64)(v38 + 12) <= v35 + (unsigned __int64)*(unsigned int *)(a4 + 4) )
{
*(_DWORD *)v38 = 8;
*(_QWORD *)v11 = v6;
++*(_DWORD *)a4;
}
else
{
return(unsigned int)-1073741789;
}
}
}
}
else
{
v36 = *(_DWORD *)(a4 + 4);
v37 = v36 + 12;
if( v36 + 12 >= v36 )
v18 = v36 + 12;
*(_DWORD *)(a4 + 4) = v18;
v7 = v37 < v36 ? 0xC0000095 : 0;
if( v37 >= v36 )
{
++*(_DWORD *)a4;
return 0;
}
}
}
return(unsigned int)v7;
}
while( 1 )
{
v30 = v28;
if( *(_DWORD *)v28 >= 0xFFFFFFFC )
{
v7 = -1073741675;
}
else
{
v23 = *(_DWORD *)v28 + 4;
v7 = 0;
}
if( v7 < 0 )
break;
v31 = &v28[v23];
v32 = -1i64;
if( v31 >= v28 )
v32 = (__int64)&v28[v23];
v28 = (char *)v32;
v7 = v31 < v30 ? 0xC0000095 : 0;
if( v31 < v30 )
goto LABEL_58;
if( (unsigned int)++v29 >= *(_DWORD *)a4 )
goto LABEL_52;
}
}
}
}
}
return(unsigned int)v7;
}Referenced by:
sub_1405F50F8