PiSwBusRelationRemove
VOID __stdcall PiSwBusRelationRemove(_PI_SWD_OBJECT *SwDeviceObject){
_PI_SWD_OBJECT *v1;
__int64 v3;
_PI_SWD_OBJECT **v4;
_QWORD *v5;
void *v6;
v1 = SwDeviceObject + 24;
v3 = *((_QWORD *)SwDeviceObject + 12);
if( *(_PI_SWD_OBJECT **)(v3 + 8) != SwDeviceObject + 24
|| (v4 = (_PI_SWD_OBJECT **)*((_QWORD *)SwDeviceObject + 13), *v4 != v1) )
{
__fastfail(3u);
}
*v4 = (_PI_SWD_OBJECT *)v3;
*(_QWORD *)(v3 + 8) = v4;
v5 = (_QWORD *)*((_QWORD *)SwDeviceObject + 14);
if( (_QWORD *)v5[2] == v5 + 2 )
{
v6 = (void *)v5[1];
RtlDeleteElementGenericTableAvl(&PiSwBusRelationsTable, v5);
if( v6 )
ExFreePoolWithTag(v6, 0x57706E50u);
}
*((_QWORD *)SwDeviceObject + 14) = 0i64;
PiSwDeviceDereference(SwDeviceObject);
}Referenced by:
PiSwCloseDevice
PiSwIrpStartCreateWorker
PiSwProcessRemove