PipAddDependencyEdgeBetweenNodes

NTSTATUS __stdcall PipAddDependencyEdgeBetweenNodes(
        PNP_DEPENDENCY_NODE *DependentNode,
        PNP_DEPENDENCY_NODE *ProviderNode,
        PNP_BINDING_REQUEST *Request){
  PNP_DEPENDENCY_NODE *v5; 
  PNP_DEPENDENCY_NODE *v7; 
  NTSTATUS v8; 
  PNP_DEPENDENCY_NODE *v9; 
  _PNP_DEPENDENCY_NODE *v10; 
  _PNP_DEPENDENCY_EDGE *NewDependencyEdge; 

  v5 = DependentNode + 4;
  v7 = (PNP_DEPENDENCY_NODE *)*((_QWORD *)DependentNode + 2);
  v8 = 0;
  while( v7 != v5 )
  {
    v9 = v7;
    v7 = *(PNP_DEPENDENCY_NODE **)v7;
    if( *((PNP_DEPENDENCY_NODE **)v9 + 4) == ProviderNode )
    {
      PipAddRequestToEdge(v9, (_UNICODE_STRING **)Request);
      return v8;
    }
  }
  if( !PipCheckValidNewDependencyEdge(DependentNode, ProviderNode) )
    return -1073741823;
  NewDependencyEdge = PipCreateNewDependencyEdge(DependentNode, v10, Request);
  if( !NewDependencyEdge )
    return -1073741670;
  if( *(_QWORD *)(*((_QWORD *)NewDependencyEdge + 4) + 48i64) )
    PipAddtoRebuildPowerRelationsQueue(*(_QWORD *)(*((_QWORD *)NewDependencyEdge + 5) + 48i64));
  return v8;
}

Referenced by:

PipDependencyCopyEdge
PipSetDependency