PiDmObjectRelease
VOID __stdcall PiDmObjectRelease(_PI_DM_OBJECT *Object){
void *v2;
_PI_DM_CACHED_PROPERTY_DATA *v3;
__int64 v4;
UINT64 CachedKeysCount;
_PI_DM_CACHED_PROPERTY_KEY *CachedKeys;
LODWORD(CachedKeysCount) = 0;
if( _InterlockedExchangeAdd(Object + 2, 0xFFFFFFFF) == 1 )
{
v2 = (void *)*((_QWORD *)Object + 2);
if( v2 )
ExFreePoolWithTag(v2, 0x5A706E50u);
PiDmGetCacheKeys((_PNP_OBJECT_TYPE)Object[7], (const _PI_DM_CACHED_PROPERTY_KEY **)&CachedKeys, &CachedKeysCount);
if( (_DWORD)CachedKeysCount )
{
v3 = Object + 28;
v4 = (unsigned int)CachedKeysCount;
do
{
PiDmCacheDataFree(v3);
v3 += 6;
--v4;
}
while( v4 );
}
ExFreePoolWithTag(Object, 0x5A706E50u);
}
}Referenced by:
IopProcessSetInterfaceState
IopRegisterDeviceInterface
PiControlGetDeviceInterfaceEnabled
PiDmAddCacheReferenceForObject
PiDmCacheDataFree
PiDmEnumObjectsWithCallback
PiDmGetObjectConstraintList
PiDmGetReferencedObjectFromProperty
PiDmListEnumObjectsWithCallback
PiDmListInitEnumCallback
PiDmObjectCreate
PiDmObjectGetAggregatedBooleanPropertyData
PiDmObjectGetCachedObjectProperty
PiDmObjectGetCachedObjectPropertyData
PiDmObjectGetCachedObjectReference
PiDmObjectManagerPopulate
PiDmObjectProcessPropertyChange
PiDmObjectUpdateCachedObjectProperty
PiDmRemoveCacheReferenceForObject
PiDqQueryActionQueueEntryFree
PiPnpRtlApplyMandatoryDeviceContainerFilters
PiPnpRtlCmActionCallback
PiPnpRtlEnsureObjectCached
PiPnpRtlFreeInstallerClassChangeInfo
PiPnpRtlFreeInterfaceDeleteInfo
PiPnpRtlFreePanelRemoveInfo
PiPnpRtlObjectEventCreate
PiPnpRtlObjectEventRelease
PiUEventFreeClientRegistrationContext