PnpFindRebalanceCandidates

__int64 __fastcall PnpFindRebalanceCandidates(unsigned int a1, __int64 a2, __int64 a3, _DWORD *a4, char a5, __int64 a6){
  _DEVICE_NODE *v8; 
  _DWORD *v9; 
  int v10; 
  int Rebalance; 
  __int64 result; 

  v8 = (_DEVICE_NODE *)a2;
  if( a1 || !a2 )
  {
    v9 = (_DWORD *)a6;
    PnpQueryRebalance(
      *(&PnpReplaceEvent + 831),
      a3,
      a4,
      (_DEVICE_NODE **)(a6 + 64 + 8i64 * a1),
      a6 + 80 + 4i64 * a1,
      a5);
    *(_QWORD *)(a6 + 24) = *(&PnpReplaceEvent + 831);
    *(_BYTE *)(a6 + 32) = 1;
  }
  else
  {
    v9 = (_DWORD *)a6;
    *(_QWORD *)(a6 + 40) = a2;
    v10 = *(_DWORD *)(a2 + 300);
    if( v10 != 776 )
      v8 = *(_DEVICE_NODE **)(a2 + 16);
    *(_DWORD *)(a6 + 8) = (v10 != 776) + 1;
    if( v8 )
    {
      do
      {
        Rebalance = PnpQueryRebalance(v8, a3, a4, (_DEVICE_NODE **)(a6 + 64), a6 + 80, a5);
        if( Rebalance != 281 )
          break;
        v8 = v8->Parent;
      }
      while( v8 );
      if( v8 )
      {
        *(_BYTE *)(a6 + 32) = Rebalance >= 0;
        *(_QWORD *)(a6 + 24) = v8;
      }
    }
  }
  result = (unsigned int)*a4;
  *v9 = result;
  return result;
}

Referenced by:

PnpRebalance