IopRemoveLegacyDeviceNode
VOID __stdcall IopRemoveLegacyDeviceNode(_DEVICE_OBJECT *DeviceObject, _DEVICE_NODE *LegacyDeviceNode){
_QWORD *v4;
__int64 v5;
__int64 v6;
_QWORD *v7;
if( DeviceObject )
{
if( (*((_DWORD *)DeviceObject + 12) & 0x1000) != 0 )
return;
}
else
{
if( !*((_QWORD *)LegacyDeviceNode + 54) )
return;
*((_QWORD *)LegacyDeviceNode + 54) = 0i64;
v4 = (_QWORD *)*((_QWORD *)LegacyDeviceNode + 1);
if( v4 )
*v4 = *(_QWORD *)LegacyDeviceNode;
if( *(_QWORD *)LegacyDeviceNode )
*(_QWORD *)(*(_QWORD *)LegacyDeviceNode + 8i64) = *((_QWORD *)LegacyDeviceNode + 1);
if( (_DEVICE_NODE *)IopLegacyDeviceNode == LegacyDeviceNode )
IopLegacyDeviceNode = *(_QWORD *)LegacyDeviceNode;
}
v5 = *((_QWORD *)LegacyDeviceNode + 66);
while( v5 )
{
v7 = (_QWORD *)(v5 + 536);
v5 = *(_QWORD *)(v5 + 536);
if( (_DEVICE_NODE *)v5 == LegacyDeviceNode )
{
*v7 = *((_QWORD *)LegacyDeviceNode + 67);
break;
}
}
*((_QWORD *)LegacyDeviceNode + 3) = 0i64;
*((_QWORD *)LegacyDeviceNode + 1) = 0i64;
*(_QWORD *)LegacyDeviceNode = 0i64;
*((_QWORD *)LegacyDeviceNode + 2) = 0i64;
v6 = *((_QWORD *)LegacyDeviceNode + 4);
PipClearDevNodeFlags(LegacyDeviceNode, 0x20000ui64);
IopDestroyDeviceNode(LegacyDeviceNode);
if( !DeviceObject )
{
*(_QWORD *)(v6 + 8) = PnpDriverObject;
IoDeleteDevice((_DEVICE_OBJECT *)v6);
}
}Referenced by:
IopLegacyResourceAllocation