IopQueryConflictFillConflicts
INT64 IopQueryConflictFillConflicts(_DEVICE_OBJECT *PhysicalDeviceObject, UINT64 a2, _QWORD *a3, INT64 a4, ...){
unsigned int v4;
INT64 v5;
_QWORD *v6;
unsigned int v7;
unsigned int v9;
unsigned int v10;
unsigned int v11;
unsigned int v12;
__int64 v13;
unsigned int v14;
unsigned int v15;
__int64 v16;
unsigned int v17;
_QWORD *v18;
__int64 v19;
unsigned int v20;
__int64 v21;
__int64 v22;
int v23;
unsigned int v24;
__int64 v25;
unsigned int v26;
unsigned int v27;
unsigned int v28;
DEVICE_OBJECT **v29;
__int64 v30;
DEVICE_OBJECT *v31;
unsigned int v32;
unsigned __int64 v33;
unsigned int v34;
unsigned int v35;
unsigned int v36;
INT64 v37;
unsigned int v39;
int v40;
UINT64 Length;
__int64 v44;
va_list va1;
va_list Lengtha;
va_start(va1, a4);
va_start(Lengtha, a4);
Length = va_arg(va1, _QWORD);
v44 = va_arg(va1, _QWORD);
v4 = 0;
v5 = a4;
v40 = 0;
v6 = a3;
v7 = a2;
v9 = 0;
if( (_DWORD)a2 )
{
v10 = 1;
do
{
if( IopEliminateBogusConflict(PhysicalDeviceObject, (_DEVICE_OBJECT *)v6[3 * v9]) )
{
if( v10 < v7 )
{
*(_OWORD *)&v6[3 * v9] = *(_OWORD *)&v6[3 * v7 - 3];
v6[3 * v9 + 2] = v6[3 * v7 - 1];
}
--v7;
--v9;
--v10;
}
++v9;
++v10;
}
while( v9 < v7 );
}
LABEL_8:
v11 = 0;
v12 = 1;
while( v11 < v7 )
{
v13 = 3i64 * v11;
if( v6[3 * v11] )
{
v14 = v12;
if( v12 < v7 )
{
v15 = v12 + 1;
do
{
if( IopEliminateBogusConflict((_DEVICE_OBJECT *)v6[v13], (_DEVICE_OBJECT *)v6[3 * v14]) )
{
if( v15 < v7 )
{
*(_OWORD *)&v6[3 * v14] = *(_OWORD *)&v6[3 * v7 - 3];
v6[3 * v14 + 2] = v6[3 * v7 - 1];
}
--v7;
--v14;
--v15;
}
else if( IopEliminateBogusConflict((_DEVICE_OBJECT *)v6[3 * v14], (_DEVICE_OBJECT *)v6[3 * v11]) )
{
v16 = 3i64 * v11;
*(_OWORD *)&v6[v16] = *(_OWORD *)&v6[3 * v14];
v6[v16 + 2] = v6[3 * v14 + 2];
if( v14 + 1 < v7 )
{
*(_OWORD *)&v6[3 * v14] = *(_OWORD *)&v6[3 * v7 - 3];
v6[3 * v14 + 2] = v6[3 * v7 - 1];
}
--v7;
goto LABEL_8;
}
v13 = 3i64 * v11;
++v14;
++v15;
}
while( v14 < v7 );
}
}
++v11;
++v12;
}
v17 = 0;
if( v7 )
{
v18 = v6;
while( 1 )
{
v19 = v17 + 1;
if( !*v18 )
break;
v18 += 3;
++v17;
if( (unsigned int)v19 >= v7 )
goto LABEL_39;
}
if( (unsigned int)v19 < v7 )
{
v20 = v17 + 2;
do
{
if( !v6[3 * v19] )
{
if( v20 < v7 )
{
*(_OWORD *)&v6[3 * v19] = *(_OWORD *)&v6[3 * v7 - 3];
v6[3 * v19 + 2] = v6[3 * v7 - 1];
}
--v7;
LODWORD(v19) = v19 - 1;
--v20;
}
v19 = (unsigned int)(v19 + 1);
++v20;
}
while( (unsigned int)v19 < v7 );
}
if( v7 != 1 )
{
v21 = v7 - 1;
if( v17 + 1 < v7 )
{
v22 = 3i64 * v17;
*(_OWORD *)&v6[v22] = *(_OWORD *)&v6[3 * v21];
v6[v22 + 2] = v6[3 * v21 + 2];
}
--v7;
}
}
LABEL_39:
v23 = v44;
v24 = 0;
v25 = (unsigned int)Length;
if( (_DWORD)v44 )
LOBYTE(v24) = (unsigned int)Length >= 0x4A;
v26 = v24;
v39 = v24;
v27 = v24;
v28 = (_DWORD)v44 != 0 ? 74 : 32;
if( v7 )
{
v29 = (DEVICE_OBJECT **)v6;
v30 = v7;
do
{
v31 = *v29;
LODWORD(Length) = 0;
IopQueryConflictFillString(v31, 0i64, (UINT64 *)Lengtha, 0i64);
v28 += 2 * Length + 40;
if( v28 <= (unsigned int)v25 )
v27 += Length;
v32 = v24 + 1;
if( v28 > (unsigned int)v25 )
v32 = v24;
v29 += 3;
v24 = v32;
--v30;
}
while( v30 );
v6 = a3;
v5 = a4;
v26 = v39;
v23 = v44;
}
*(_DWORD *)(v5 + 16) = v28;
*(_DWORD *)(v5 + 8) = v26 + v7;
*(_DWORD *)(v5 + 12) = v24;
v33 = v5 + 8 * (v24 + 4i64 * v24 + 3);
if( v33 <= v5 + v25 - 8 )
{
*(_DWORD *)v33 = -1;
if( v26 )
{
v34 = 1;
*(_DWORD *)(v5 + 24) = 0;
*(_DWORD *)(v5 + 28) = v23;
--v27;
*(_DWORD *)(v5 + 32) = 0;
*(_QWORD *)(v5 + 40) = 0i64;
*(_QWORD *)(v5 + 48) = 0i64;
*(_DWORD *)(v5 + 56) = 0;
v40 = 1;
*(_WORD *)(v33 + 4) = 0;
}
else
{
v34 = 0;
}
LODWORD(v44) = 0;
v35 = 0;
v36 = v34;
if( v34 < v24 )
{
v37 = v5 + 40i64 * v34 + 28;
do
{
*(_DWORD *)(v37 - 4) = v36;
*(_QWORD *)v37 = 0i64;
*(_QWORD *)(v37 + 12) = 1i64;
*(_QWORD *)(v37 + 20) = 0i64;
*(_DWORD *)(v37 + 28) = 0;
LODWORD(Length) = v27;
IopQueryConflictFillString(
(DEVICE_OBJECT *)v6[3 * v35],
(WCHAR *)(v33 + 2 * (v36 + 2i64)),
(UINT64 *)Lengtha,
(UINT64 *)(v5 + 40i64 * v34 + 28));
v37 += 40i64;
v35 = v44 + 1;
v27 -= Length;
v34 = v40 + 1;
v36 += Length;
LODWORD(v44) = v44 + 1;
v40 = v34;
}
while( v34 < v24 );
}
*(_WORD *)(v33 + 2i64 * v36 + 4) = 0;
}
else
{
return(unsigned int)-1073741789;
}
return v4;
}Referenced by:
IopQueryConflictListInternal