IopBootAllocation
NTSTATUS __stdcall IopBootAllocation(_REQ_LIST *ReqList){
NTSTATUS v1;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v3;
_LIST_ENTRY *v4;
int v5;
_LIST_ENTRY *v6;
_LIST_ENTRY *v7;
_LIST_ENTRY ActiveArbiterList;
__int128 v10[2];
ActiveArbiterList.Blink = &ActiveArbiterList;
v10[0] = 0i64;
v1 = 0;
ActiveArbiterList.Flink = &ActiveArbiterList;
*((_QWORD *)ReqList + 2) = ReqList + 10;
v10[1] = 0i64;
IopAddRemoveReqDescs(
(_REQ_DESC **)(*((_QWORD *)ReqList + 5) + 24i64),
*(unsigned int *)(*((_QWORD *)ReqList + 5) + 20i64),
&ActiveArbiterList,
1u);
Flink = ActiveArbiterList.Flink;
while( Flink != &ActiveArbiterList )
{
v3 = Flink;
Flink = Flink->Flink;
if( BYTE1(v3[1].Flink) )
{
v4 = v3 - 3;
*(_QWORD *)&v10[0] = v3 - 3;
v5 = ((__int64(__fastcall *)(_LIST_ENTRY *, __int64, __int128 *))v3[-4].Flink[2].Flink)(
v3[-4].Flink->Blink,
9i64,
v10);
v6 = v3 - 1;
v3->Blink = v3;
v6->Blink = v6;
v6->Flink = v6;
v7 = v3 - 2;
if( v5 < 0 )
v1 = v5;
v7->Blink = v7;
LOWORD(v3[1].Flink) = 0;
v7->Flink = v7;
v3->Flink = v3;
v4->Blink = v4;
v4->Flink = v4;
}
}
return v1;
}Referenced by:
IopAllocateBootResourcesInternal