PiDevCfgFreeDriverNode
VOID __stdcall PiDevCfgFreeDriverNode(_PI_DEVCFG_DRIVER_NODE *DriverNode){
_PI_DEVCFG_DRIVER_NODE **v2;
_PI_DEVCFG_DRIVER_NODE *v3;
_PI_DEVCFG_DRIVER_NODE **v4;
_PI_DEVCFG_DRIVER_NODE *v5;
_PI_DEVCFG_DRIVER_NODE **v6;
_PI_DEVCFG_DRIVER_NODE *v7;
void *v8;
__int64 v9;
__int64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
__int64 v14;
v2 = (_PI_DEVCFG_DRIVER_NODE **)(DriverNode + 56);
while( 1 )
{
v3 = *v2;
if( *v2 == (_PI_DEVCFG_DRIVER_NODE *)v2 )
break;
if( *((_PI_DEVCFG_DRIVER_NODE ***)v3 + 1) != v2
|| (v12 = *(_QWORD *)v3, *(_PI_DEVCFG_DRIVER_NODE **)(*(_QWORD *)v3 + 8i64) != v3) )
{
LABEL_19:
__fastfail(3u);
}
*v2 = (_PI_DEVCFG_DRIVER_NODE *)v12;
*(_QWORD *)(v12 + 8) = v2;
PiDevCfgFreeDriverNode(v3);
}
v4 = (_PI_DEVCFG_DRIVER_NODE **)(DriverNode + 52);
while( 1 )
{
v5 = *v4;
if( *v4 == (_PI_DEVCFG_DRIVER_NODE *)v4 )
break;
if( *((_PI_DEVCFG_DRIVER_NODE ***)v5 + 1) != v4 )
goto LABEL_19;
v13 = *(_QWORD *)v5;
if( *(_PI_DEVCFG_DRIVER_NODE **)(*(_QWORD *)v5 + 8i64) != v5 )
goto LABEL_19;
*v4 = (_PI_DEVCFG_DRIVER_NODE *)v13;
*(_QWORD *)(v13 + 8) = v4;
PiDevCfgFreeDriverNode(v5);
}
v6 = (_PI_DEVCFG_DRIVER_NODE **)(DriverNode + 92);
while( 1 )
{
v7 = *v6;
if( *v6 == (_PI_DEVCFG_DRIVER_NODE *)v6 )
break;
if( *((_PI_DEVCFG_DRIVER_NODE ***)v7 + 1) != v6 )
goto LABEL_19;
v14 = *(_QWORD *)v7;
if( *(_PI_DEVCFG_DRIVER_NODE **)(*(_QWORD *)v7 + 8i64) != v7 )
goto LABEL_19;
*v6 = (_PI_DEVCFG_DRIVER_NODE *)v14;
*(_QWORD *)(v14 + 8) = v6;
PiDevCfgFreeDriverNode(v7);
}
v8 = (void *)*((_QWORD *)DriverNode + 18);
if( v8 )
ExFreePoolWithTag(v8, 0);
v9 = *((_QWORD *)DriverNode + 2);
if( v9 )
ZwClose(v9);
v10 = *((_QWORD *)DriverNode + 3);
if( v10 )
ZwClose(v10);
v11 = *((_QWORD *)DriverNode + 4);
if( v11 )
ZwClose(v11);
RtlFreeAnsiString((_UNICODE_STRING *)(DriverNode + 14));
RtlFreeAnsiString((_UNICODE_STRING *)(DriverNode + 10));
RtlFreeAnsiString((_UNICODE_STRING *)(DriverNode + 18));
RtlFreeAnsiString((_UNICODE_STRING *)(DriverNode + 22));
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 8);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 10);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 16);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 17);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 18);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 19);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 20);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 21);
RtlFreeAnsiString((_UNICODE_STRING *)DriverNode + 22);
RtlFreeAnsiString((_UNICODE_STRING *)(DriverNode + 98));
ExFreePoolWithTag(DriverNode, 0);
}Referenced by:
PiDevCfgCheckDeviceNeedsUpdate
PiDevCfgFindDeviceDriver
PiDevCfgFreeDriverNode
PiDevCfgProcessDevice
PiDevCfgQueryDriverNode
PiDevCfgQueryIncludedDriverNode
PpDevCfgProcessDeviceExtensions