PopFxDestroyDeviceDpm
void __fastcall PopFxDestroyDeviceDpm(__int64 a1, __int64 a2){
void *v4;
void *v5;
IRP *v6;
void *v7;
void *v8;
__int64 v9;
__int64 v10;
void *v11;
v4 = *(void **)(a2 + 104);
if( v4 )
ObfDereferenceObjectWithTag(v4, 0x78466F50ui64);
v5 = *(void **)(a2 + 96);
if( v5 )
ObfDereferenceObjectWithTag(v5, 0x78466F50ui64);
if( a1 )
ObfDereferenceObjectWithTag(*(PVOID *)(a1 + 32), 0x78466F50ui64);
v6 = *(IRP **)(a2 + 16);
if( v6 )
IoFreeIrp(v6);
v7 = *(void **)(a2 + 1200);
if( v7 )
ExFreePoolWithTag(v7, 0x4D584650u);
v8 = *(void **)(a2 + 832);
if( v8 )
{
v9 = 0i64;
if( *(_DWORD *)(a2 + 828) )
{
do
{
v10 = *(_QWORD *)(*(_QWORD *)(a2 + 832) + 8 * v9);
v11 = *(void **)(v10 + 424);
if( v11 )
{
ExFreePoolWithTag(v11, 0x4D584650u);
*(_QWORD *)(v10 + 424) = 0i64;
}
v9 = (unsigned int)(v9 + 1);
}
while( (unsigned int)v9 < *(_DWORD *)(a2 + 828) );
v8 = *(void **)(a2 + 832);
}
ExFreePoolWithTag(v8, 0x4D584650u);
*(_QWORD *)(a2 + 832) = 0i64;
}
*(_QWORD *)(a2 + 56) = 0i64;
*(_QWORD *)(a2 + 64) = 0i64;
*(_QWORD *)(a2 + 72) = 0i64;
if( a1 )
_InterlockedAnd((volatile signed __int32 *)(a1 + 296), 0xFFFFFFBF);
PopFxDestroyDeviceCommon((PVOID)a2, 1);
}Referenced by:
PoFxUnregisterDevice
PopFxUnregisterDevice