PiSwCloseDevice
VOID __stdcall PiSwCloseDevice(_PI_SWD_OBJECT *SwDeviceObject){
_DEVICE_OBJECT *v1;
_ADAPTER_OBJECT *v2;
_PI_SWD_OBJECT *SwDeviceObjecta;
SwDeviceObjecta = SwDeviceObject;
if( *((_QWORD *)SwDeviceObject + 11) )
{
PiSwQueuedCreateInfoFree(*((_PI_SWD_QUEUED_CREATE_INFO **)SwDeviceObject + 11));
*((_QWORD *)SwDeviceObjecta + 11) = 0i64;
SwDeviceObject = SwDeviceObjecta;
}
if( *((_QWORD *)SwDeviceObject + 15) )
{
SwDeviceObject[1] |= 2u;
v1 = (_DEVICE_OBJECT *)PnpDeviceObjectFromDeviceInstanceWithTag(*((_QWORD *)SwDeviceObjecta + 14), 0x746C6644u);
v2 = (_ADAPTER_OBJECT *)v1;
if( v1 )
{
IoInvalidateDeviceRelations(v1, SingleBusRelations);
HalPutDmaAdapter(v2);
}
}
else
{
if( *((_QWORD *)SwDeviceObject + 14) )
PiSwBusRelationRemove(SwDeviceObject);
RtlDeleteElementGenericTableAvl(&PiSwDeviceInstanceTable, &SwDeviceObjecta);
PiSwDeviceDereference(SwDeviceObjecta);
}
}Referenced by:
PiSwCloseDescendants
PiSwIrpCleanup
PiSwStopDestroy