IopAddRemoveReqDescs
void __fastcall IopAddRemoveReqDescs(__int64 a1, unsigned int a2, _QWORD *a3, char a4){
__int64 v4;
__int64 v9;
__int64 v10;
char v11;
_QWORD *v12;
_QWORD *v13;
_QWORD *v14;
_QWORD *i;
__int64 v16;
_QWORD *v17;
_QWORD *v18;
__int64 v19;
_QWORD *v20;
__int64 v21;
if( a2 )
{
v4 = 0i64;
do
{
v9 = *(_QWORD *)(a1 + 8 * v4);
if( *(_BYTE *)(v9 + 8) )
{
v10 = *(_QWORD *)(v9 + 288);
v11 = *(_BYTE *)(v10 + 104);
if( (v11 & 1) != 0 )
{
v21 = *(_QWORD *)(v10 + 24);
*(_BYTE *)(v10 + 104) = v11 & 0xFE;
(*(void(__fastcall **)(_QWORD, __int64))(v21 + 32))(*(_QWORD *)(v21 + 8), 3i64);
}
*(_BYTE *)(v10 + 105) = 1;
v12 = (_QWORD *)(*(_QWORD *)(v9 + 32) + 40i64);
if( a4 )
{
*(_QWORD *)(*(_QWORD *)(v9 + 32) + 48i64) = *(_QWORD *)(v9 + 32) + 40i64;
*v12 = v12;
v13 = *(_QWORD **)(v10 + 48);
if( *v13 != v10 + 40 )
goto LABEL_20;
v12[1] = v13;
*v12 = v10 + 40;
*v13 = v12;
v14 = (_QWORD *)(v10 + 88);
*(_QWORD *)(v10 + 48) = v12;
if( (_QWORD *)*v14 == v14 )
{
for( i = (_QWORD *)*a3; i != a3; i = (_QWORD *)*i )
{
if( *(_DWORD *)(*(i - 7) + 152i64) >= *(_DWORD *)(*(_QWORD *)(v10 + 32) + 152i64) )
break;
}
*v14 = i;
*(_QWORD *)(v10 + 96) = i[1];
*(_QWORD *)i[1] = v14;
i[1] = v14;
}
}
else
{
v16 = *v12;
if( *(_QWORD **)(*v12 + 8i64) != v12
|| (v17 = *(_QWORD **)(*(_QWORD *)(v9 + 32) + 48i64), (_QWORD *)*v17 != v12) )
{
LABEL_20:
__fastfail(3u);
}
*v17 = v16;
*(_QWORD *)(v16 + 8) = v17;
v12[1] = v12;
*v12 = v12;
if( *(_QWORD *)(v10 + 40) == v10 + 40 )
{
v18 = (_QWORD *)(v10 + 88);
v19 = *(_QWORD *)(v10 + 88);
if( *(_QWORD *)(v19 + 8) != v10 + 88 )
goto LABEL_20;
v20 = *(_QWORD **)(v10 + 96);
if( (_QWORD *)*v20 != v18 )
goto LABEL_20;
*v20 = v19;
*(_QWORD *)(v19 + 8) = v20;
*(_QWORD *)(v10 + 96) = v10 + 88;
*v18 = v18;
}
}
}
v4 = (unsigned int)(v4 + 1);
}
while( (unsigned int)v4 < a2 );
}
}Referenced by:
IopBootAllocation
IopSelectNextConfiguration
PnpFindBestConfigurationWorker
PnpSelectFirstConfiguration