IopCheckIfMergeRequired
char __fastcall IopCheckIfMergeRequired(unsigned int **a1, int **a2){
__int64 v4;
unsigned __int64 v5;
__int64 v6;
LIST_ENTRY *ProviderList;
LIST_ENTRY *Flink;
LIST_ENTRY **v9;
INT64 a3;
DEVICE_OBJECT *Provider;
UINT64 DependencyTypes;
int a2a;
int v15;
a3 = 0i64;
Provider = 0i64;
a2a = 0;
v15 = 0;
LABEL_2:
while( IopEnumerateRelations(a1, &a2a, &a3, 0i64, 0i64) )
{
if( PipIsDeviceInDeviceObjectList((INT64 *)*a2, a3, 0i64) )
return 1;
v5 = *(_QWORD *)(v4 + 16);
if( !v5 )
v5 = *(_QWORD *)(v4 + 648) & 0xFFFFFFFFFFFFFFFEui64;
if( PipIsDeviceInDeviceObjectList((INT64 *)*a2, *(_QWORD *)(v5 + 32), 0i64) )
return 1;
ProviderList = PiGetProviderList(*(DEVICE_OBJECT **)(v6 + 32));
Flink = ProviderList->Flink;
if( ProviderList->Flink != ProviderList )
{
while( 1 )
{
PiEnumerateProviderListEntry(Flink, &Provider, &DependencyTypes);
Flink = *v9;
if( Provider )
{
if( PipIsDeviceInDeviceObjectList((INT64 *)*a2, (INT64)Provider, 0i64) )
return 1;
}
if( Flink == ProviderList )
goto LABEL_2;
}
}
}
return 0;
}Referenced by:
PnpQueuePendingSurpriseRemoval