PipSetDependency
INT64 __fastcall PipSetDependency(INT64 a1, const UNICODE_STRING **a2){
INT64 *BindingResolution;
INT64 *DependencyNode;
unsigned int v6;
INT64 *v7;
INT64 *v8;
INT64 v9;
UINT64 v10;
bool v11;
BindingResolution = PipQueryBindingResolution(a1);
DependencyNode = BindingResolution;
if( BindingResolution )
{
++*((_DWORD *)BindingResolution + 22);
}
else
{
DependencyNode = (INT64 *)PipCreateDependencyNode(a1);
if( !DependencyNode )
return(unsigned int)-1073741670;
}
v7 = PipQueryBindingResolution((INT64)a2);
v8 = v7;
if( v7 )
{
++*((_DWORD *)v7 + 22);
goto LABEL_9;
}
v8 = (INT64 *)PipCreateDependencyNode(a2);
if( v8 )
{
LABEL_9:
v6 = PipAddDependencyEdgeBetweenNodes((__int64)DependencyNode, (__int64)v8, a2);
goto LABEL_10;
}
v6 = -1073741670;
LABEL_10:
v11 = (*((_DWORD *)DependencyNode + 22))-- == 1;
if( v11 )
PipDeleteDependencyNode(DependencyNode, v9, v10);
if( v8 )
{
v11 = (*((_DWORD *)v8 + 22))-- == 1;
if( v11 )
PipDeleteDependencyNode(v8, v9, v10);
}
return v6;
}Referenced by:
IoReserveDependency
IoSetDependency
PipConvertResolutionsToReservations