PipCheckValidNewDependencyEdge

CHAR __fastcall PipCheckValidNewDependencyEdge(INT64 a1, INT64 a2){
  __int64 v2; 
  _QWORD *v3; 
  __int64 v4; 
  _QWORD *v5; 
  INT64 v6; 
  INT64 v7; 
  INT64 v8; 
  INT64 *v9; 
  __int64 v10; 
  if( a1 == a2 )
    return 0;
  v2 = *(_QWORD *)(a1 + 48);
  if( v2 )
    v3 = *(_QWORD **)(*(_QWORD *)(v2 + 312) + 40i64);
  else
    v3 = 0i64;
  v4 = *(_QWORD *)(a2 + 48);
  if( v4 )
    v5 = *(_QWORD **)(*(_QWORD *)(v4 + 312) + 40i64);
  else
    v5 = 0i64;
  if( v3 && v5 )
  {
    do
    {
      v5 = (_QWORD *)v5[2];
      if( v5 == v3 )
        return 0;
    }
    while( v5 != IopRootDeviceNode );
  }
  v6 = a2 + 16;
  v7 = *(_QWORD *)(a2 + 16);
  while( v7 != v6 )
  {
    v8 = PiListEntryToDependencyEdge(v7, 0i64);
    v7 = *v9;
    if( *(_QWORD *)(v8 + 32) == v10 )
      return 0;
  }
  return 1;
}

Referenced by:

PipAddDependencyEdgeBetweenNodes