PiSwCloseDevice
void __fastcall PiSwCloseDevice(CHAR *a1){
DEVICE_OBJECT *v1;
struct _DMA_ADAPTER *v2;
CHAR *Buffer;
Buffer = a1;
if( *((_QWORD *)a1 + 11) )
{
PiSwQueuedCreateInfoFree(*((PVOID *)a1 + 11));
*((_QWORD *)Buffer + 11) = 0i64;
a1 = Buffer;
}
if( *((_QWORD *)a1 + 15) )
{
*((_DWORD *)a1 + 1) |= 2u;
v1 = (DEVICE_OBJECT *)PnpDeviceObjectFromDeviceInstanceWithTag(*((_QWORD *)Buffer + 14), 0x746C6644ui64);
v2 = (struct _DMA_ADAPTER *)v1;
if( v1 )
{
IoInvalidateDeviceRelations(v1, SingleBusRelations);
HalPutDmaAdapter(v2);
}
}
else
{
if( *((_QWORD *)a1 + 14) )
PiSwBusRelationRemove(a1);
RtlDeleteElementGenericTableAvl(&PiSwDeviceInstanceTable, &Buffer);
PiSwDeviceDereference(Buffer);
}
}Referenced by:
PiSwCloseDescendants
PiSwIrpCleanup
PiSwStopDestroy