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