PipSetDependency

NTSTATUS __stdcall PipSetDependency(PNP_BINDING_RESOLUTION *Dependent, PNP_BINDING_REQUEST *Request){
  _PNP_DEPENDENCY_NODE *BindingResolution; 
  PNP_DEPENDENCY_NODE *DependencyNode; 
  NTSTATUS v6; 
  _PNP_DEPENDENCY_NODE *v7; 
  PNP_DEPENDENCY_NODE *v8; 
  bool v9; 

  BindingResolution = PipQueryBindingResolution(Dependent);
  DependencyNode = BindingResolution;
  if( BindingResolution )
  {
    ++BindingResolution[22];
  }
  else
  {
    DependencyNode = (PNP_DEPENDENCY_NODE *)PipCreateDependencyNode(Dependent);
    if( !DependencyNode )
      return -1073741670;
  }
  v7 = PipQueryBindingResolution(Request);
  v8 = v7;
  if( v7 )
  {
    ++v7[22];
    goto LABEL_9;
  }
  v8 = (PNP_DEPENDENCY_NODE *)PipCreateDependencyNode(Request);
  if( v8 )
  {
LABEL_9:
    v6 = PipAddDependencyEdgeBetweenNodes(DependencyNode, v8, Request);
    goto LABEL_10;
  }
  v6 = -1073741670;
LABEL_10:
  v9 = DependencyNode[22]-- == 1;
  if( v9 )
    PipDeleteDependencyNode(DependencyNode);
  if( v8 )
  {
    v9 = v8[22]-- == 1;
    if( v9 )
      PipDeleteDependencyNode(v8);
  }
  return v6;
}

Referenced by:

IoReserveDependency
IoSetDependency
PipConvertResolutionsToReservations