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