IopReleaseResources
VOID __stdcall IopReleaseResources(_DEVICE_NODE *DeviceNode){
_CM_RESOURCE_LIST *ResourceList;
_CM_RESOURCE_LIST *ResourceListTranslated;
unsigned int Flags;
_CM_RESOURCE_LIST *v5;
_CM_RESOURCE_LIST *BootResources;
PnpReleaseResourcesInternal(DeviceNode);
ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 6336));
ResourceList = DeviceNode->ResourceList;
if( ResourceList )
{
ExFreePoolWithTag(ResourceList, 0);
DeviceNode->ResourceList = 0i64;
}
ResourceListTranslated = DeviceNode->ResourceListTranslated;
if( ResourceListTranslated )
{
ExFreePoolWithTag(ResourceListTranslated, 0);
DeviceNode->ResourceListTranslated = 0i64;
}
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 6336));
Flags = DeviceNode->Flags;
if( (Flags & 0x10001) == 1 )
{
if( (Flags & 0x40) != 0 )
{
BootResources = DeviceNode->BootResources;
if( BootResources )
IopAllocateBootResourcesInternal(ArbiterRequestPnpEnumerated, DeviceNode->PhysicalDeviceObject, BootResources);
}
}
else
{
PipClearDevNodeFlags(DeviceNode, 0xC0ui64);
v5 = DeviceNode->BootResources;
if( v5 )
{
ExFreePoolWithTag(v5, 0);
DeviceNode->BootResources = 0i64;
}
}
}Referenced by:
IopLegacyResourceAllocation