PipFreeDependencyEdge
void __fastcall PipFreeDependencyEdge(PVOID P, __int64 a2){
__int64 **v3;
__int64 *v5;
__int64 v6;
unsigned __int8 v7;
unsigned __int64 v8;
_QWORD *v9;
PVOID *v10;
PVOID *v11;
PVOID *v12;
v3 = (__int64 **)((char *)P + 56);
while( 1 )
{
v5 = *v3;
if( *v3 == (__int64 *)v3 )
break;
v6 = *v5;
if( (__int64 **)v5[1] != v3 || *(__int64 **)(v6 + 8) != v5 )
goto LABEL_13;
*v3 = (__int64 *)v6;
*(_QWORD *)(v6 + 8) = v3;
PipFreeBindingRequestEntry(v5);
}
KeAcquireSpinLockRaiseToDpc(&PiDependencyEdgeWriteLock, a2);
v8 = v7;
if( a2 )
*(_DWORD *)(a2 + 48) |= *((_DWORD *)P + 12);
v9 = *(_QWORD **)P;
v10 = (PVOID *)*((_QWORD *)P + 1);
if( *(PVOID *)(*(_QWORD *)P + 8i64) != P
|| *v10 != P
|| (*v10 = v9,
v9[1] = v10,
v11 = (PVOID *)*((_QWORD *)P + 2),
v12 = (PVOID *)*((_QWORD *)P + 3),
v11[1] != (char *)P + 16)
|| *v12 != (char *)P + 16 )
{
LABEL_13:
__fastfail(3u);
}
*v12 = v11;
v11[1] = v12;
KxReleaseSpinLock(&PiDependencyEdgeWriteLock);
__writecr8(v8);
PipNotifyDependenciesChanged(*((_QWORD *)P + 5), *((_QWORD *)P + 4));
PipDereferenceDependencyNode(*((_QWORD *)P + 4));
PipDereferenceDependencyNode(*((_QWORD *)P + 5));
ExFreePoolWithTag(P, 0x53706E50u);
}Referenced by:
PipMergeDependencyEdgeList