PipCheckValidNewDependencyEdge

UINT8 __stdcall PipCheckValidNewDependencyEdge(_PNP_DEPENDENCY_NODE *Dependent, _PNP_DEPENDENCY_NODE *Provider){
  __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  _PNP_DEPENDENCY_NODE *v6; 
  _LIST_ENTRY *v7; 
  _PNP_DEPENDENCY_EDGE *v8; 
  _LIST_ENTRY **v9; 
  __int64 v10; 

  if( Dependent == Provider )
    return 0;
  v2 = *((_QWORD *)Dependent + 6);
  if( v2 )
    v3 = *(_QWORD *)(*(_QWORD *)(v2 + 312) + 40i64);
  else
    v3 = 0i64;
  v4 = *((_QWORD *)Provider + 6);
  if( v4 )
    v5 = *(_QWORD *)(*(_QWORD *)(v4 + 312) + 40i64);
  else
    v5 = 0i64;
  if( v3 && v5 )
  {
    do
    {
      v5 = *(_QWORD *)(v5 + 16);
      if( v5 == v3 )
        return 0;
    }
    while( v5 != *(&PnpReplaceEvent + 831) );
  }
  v6 = Provider + 4;
  v7 = (_LIST_ENTRY *)*((_QWORD *)Provider + 2);
  while( v7 != (_LIST_ENTRY *)v6 )
  {
    v8 = PiListEntryToDependencyEdge(v7, ProviderList);
    v7 = *v9;
    if( *((_QWORD *)v8 + 4) == v10 )
      return 0;
  }
  return 1;
}

Referenced by:

PipAddDependencyEdgeBetweenNodes