IopSelectNextConfiguration

CHAR __fastcall IopSelectNextConfiguration(INT64 a1, UINT64 a2, _QWORD *a3){
  unsigned int v3; 
  unsigned int v5; 
  unsigned int v7; 
  INT64 v8; 
  __int64 v9; 
  INT64 v11; 
  __int64 v12; 
  v3 = 0;
  v5 = a2;
  v7 = 0;
  if( (_DWORD)a2 )
  {
    v8 = a1 + 32;
    do
    {
      v9 = *(_QWORD *)v8;
      IopAddRemoveReqDescs(
        **(_QWORD **)(*(_QWORD *)v8 + 16i64) + 24i64,
        *(_DWORD *)(**(_QWORD **)(*(_QWORD *)v8 + 16i64) + 20i64),
        0i64,
        0);
      *(_QWORD *)(v9 + 16) += 8i64;
      if( *(_QWORD *)(v9 + 16) < *(_QWORD *)(v9 + 24) )
        break;
      ++v7;
      v8 += 64i64;
      *(_QWORD *)(v9 + 16) = v9 + 40;
    }
    while( v7 < v5 );
  }
  if( v7 == v5 )
    return 0;
  if( v5 )
  {
    v11 = a1 + 32;
    do
    {
      v12 = *(_QWORD *)v11;
      IopAddRemoveReqDescs(
        **(_QWORD **)(*(_QWORD *)v11 + 16i64) + 24i64,
        *(_DWORD *)(**(_QWORD **)(*(_QWORD *)v11 + 16i64) + 20i64),
        a3,
        1);
      if( *(_QWORD *)(v12 + 16) != v12 + 40 )
        break;
      ++v3;
      v11 += 64i64;
    }
    while( v3 < v5 );
  }
  return 1;
}

Referenced by:

PnpFindBestConfigurationWorker