PipDeleteAllDependencyRelations
VOID __stdcall PipDeleteAllDependencyRelations(_DEVICE_OBJECT *DeviceObject){
char *DependencyNode;
_LIST_ENTRY *v3;
_LIST_ENTRY *v4;
bool v5;
int v6;
int v7;
_PNP_DEPENDENCY_EDGE *v8;
_PNP_DEPENDENCY_EDGE *v9;
_PNP_DEPENDENCY_EDGE *v10;
__int64 v11;
_DEVICE_OBJECT *v12;
if( DeviceObject )
DependencyNode = (char *)DeviceObject->DeviceObjectExtension->DependencyNode;
else
DependencyNode = 0i64;
if( DependencyNode )
{
++*((_DWORD *)DependencyNode + 22);
PipConvertResolutionsToReservations((PNP_DEPENDENCY_NODE *)DependencyNode);
v3 = (_LIST_ENTRY *)*((_QWORD *)DependencyNode + 2);
while( v3 != (_LIST_ENTRY *)(DependencyNode + 16) )
{
v8 = PiListEntryToDependencyEdge(v3, ProviderList);
v3 = v3->Flink;
PipFreeDependencyEdge(v8, v9);
}
v4 = (_LIST_ENTRY *)*((_QWORD *)DependencyNode + 4);
while( v4 != (_LIST_ENTRY *)(DependencyNode + 32) )
{
v10 = PiListEntryToDependencyEdge(v4, DependentList);
v4 = v4->Flink;
v11 = *((_QWORD *)v10 + 5);
++*(_DWORD *)(v11 + 88);
PipFreeDependencyEdge(v10, 0i64);
v12 = *(_DEVICE_OBJECT **)(v11 + 48);
if( v12 && *(_QWORD *)(v11 + 16) != v11 + 16 )
PipAttemptDependentStart(v12);
v5 = (*(_DWORD *)(v11 + 88))-- == 1;
if( v5 )
PipDeleteDependencyNode((_PNP_DEPENDENCY_NODE *)v11);
}
DeviceObject->DeviceObjectExtension->DependencyNode = 0i64;
*((_QWORD *)DependencyNode + 6) = 0i64;
v5 = (*((_DWORD *)DependencyNode + 22))-- == 1;
v6 = *((_DWORD *)DependencyNode + 22);
if( v5 )
{
PipDeleteDependencyNode((_PNP_DEPENDENCY_NODE *)DependencyNode);
v6 = *((_DWORD *)DependencyNode + 22);
}
v7 = v6 - 1;
*((_DWORD *)DependencyNode + 22) = v7;
if( !v7 )
PipDeleteDependencyNode((_PNP_DEPENDENCY_NODE *)DependencyNode);
}
}Referenced by:
PnpDeleteAllDependencyRelations