PnpFindRebalanceCandidates
INT64 __fastcall PnpFindRebalanceCandidates(UINT64 a1, INT64 a2, INT64 a3, _DWORD *a4, UINT8 a5, INT64 a6){
INT64 v8;
_DWORD *v9;
int v10;
int Rebalance;
INT64 result;
INT64 RebalanceDueToDynamicPartitioning;
v8 = a2;
if( (_DWORD)a1 || !a2 )
{
v9 = (_DWORD *)a6;
LOBYTE(RebalanceDueToDynamicPartitioning) = a5;
PnpQueryRebalance(
(_DEVICE_NODE *)IopRootDeviceNode,
(_PNP_RESOURCE_REQUEST *)a3,
a4,
(_DEVICE_NODE **)(a6 + 64 + 8i64 * (unsigned int)a1),
(_PNP_DEVNODE_QUERY_REBALANCE_VETO_REASON *)(a6 + 80 + 4i64 * (unsigned int)a1),
RebalanceDueToDynamicPartitioning);
*(_QWORD *)(a6 + 24) = IopRootDeviceNode;
*(_BYTE *)(a6 + 32) = 1;
}
else
{
v9 = (_DWORD *)a6;
*(_QWORD *)(a6 + 40) = a2;
v10 = *(_DWORD *)(a2 + 300);
if( v10 != 776 )
v8 = *(_QWORD *)(a2 + 16);
*(_DWORD *)(a6 + 8) = (v10 != 776) + 1;
if( v8 )
{
do
{
LOBYTE(RebalanceDueToDynamicPartitioning) = a5;
Rebalance = PnpQueryRebalance(
(_DEVICE_NODE *)v8,
(_PNP_RESOURCE_REQUEST *)a3,
a4,
(_DEVICE_NODE **)(a6 + 64),
(_PNP_DEVNODE_QUERY_REBALANCE_VETO_REASON *)(a6 + 80),
RebalanceDueToDynamicPartitioning);
if( Rebalance != 281 )
break;
v8 = *(_QWORD *)(v8 + 16);
}
while( v8 );
if( v8 )
{
*(_BYTE *)(a6 + 32) = Rebalance >= 0;
*(_QWORD *)(a6 + 24) = v8;
}
}
}
result = (unsigned int)*a4;
*v9 = result;
return result;
}Referenced by:
PnpRebalance