PopFxFreeUniqueId
VOID __stdcall PopFxFreeUniqueId(_DEVICE_NODE *DevNode){
wchar_t *Buffer;
signed __int32 PowerFlags;
signed __int32 v4;
Buffer = DevNode->UniqueId.Buffer;
if( DevNode->InstancePath.Buffer != Buffer )
{
if( Buffer )
{
_m_prefetchw((const void *)&DevNode->PowerFlags);
PowerFlags = DevNode->PowerFlags;
do
{
v4 = PowerFlags;
PowerFlags = _InterlockedCompareExchange(&DevNode->PowerFlags, PowerFlags, PowerFlags);
}
while( v4 != PowerFlags );
if( (PowerFlags & 0x2000) == 0 )
ExFreePoolWithTag(DevNode->UniqueId.Buffer, 0x4D584650u);
}
}
DevNode->UniqueId = 0i64;
}Referenced by:
PoFxAbandonDevice