IovpAdvanceStackDownwards
__int64 __fastcall IovpAdvanceStackDownwards(
__int64 a1,
char a2,
__int64 a3,
__int64 a4,
int a5,
int a6,
int a7,
_QWORD *a8){
unsigned __int8 *v10;
int v11;
__int64 v12;
__int64 v13;
unsigned __int8 *v14;
unsigned __int8 *v15;
_QWORD *v16;
__int64 v17;
__int64 result;
__int64 v19;
unsigned __int8 *v21;
v10 = (unsigned __int8 *)(120i64 * a2 + a1 - 120);
v21 = v10;
if( !*v10 && a7 )
{
memset((INT64)v10, 0i64);
*((_QWORD *)v10 + 4) = a3;
*((_QWORD *)v10 + 3) = v10 + 16;
*((_QWORD *)v10 + 2) = v10 + 16;
}
v11 = 0;
if( a4 )
{
if( a5 <= 0 )
{
v13 = *((_QWORD *)v10 + 1);
v12 = 0i64;
v15 = 0i64;
v14 = 0i64;
}
else
{
v13 = *(_QWORD *)&v10[120 * a5 + 8];
v12 = *(_QWORD *)&v10[120 * a5 + 40];
*((_QWORD *)v10 + 1) = v13;
v15 = &v10[120 * a5 + 48];
v14 = &v10[120 * a5 + 56];
v11 = *(_DWORD *)&v10[120 * a5 + 4] & 0x10000000;
*((_DWORD *)v10 + 1) |= v11;
}
}
else
{
v12 = 0i64;
v13 = 0i64;
v14 = 0i64;
v15 = 0i64;
}
if( a5 > 1 )
{
v16 = v10 + 16;
v19 = (unsigned int)(a5 - 1);
v17 = a3;
do
{
v16 += 15;
v17 += 72i64;
memset((INT64)(v16 - 2), 0i64);
v16[1] = v16;
*v16 = v16;
*((_BYTE *)v16 - 16) = 1;
v16[2] = v17;
*(v16 - 1) = v13;
v16[4] = *(_QWORD *)v15;
v16[5] = *(_QWORD *)v14;
v16[3] = v12;
*((_DWORD *)v16 - 3) |= v11 | 0x800000;
--v19;
}
while( v19 );
v10 = v21;
}
*a8 = v10;
if( !a7 )
return *v10;
if( a6 )
*((_QWORD *)v10 + 1) = v10;
result = *v10;
*v10 = 1;
return result;
}Referenced by:
IovpCallDriver1
IovpCompleteRequest1