PopFxUnregisterDeviceOrWait

void __fastcall PopFxUnregisterDeviceOrWait(_DEVICE_NODE *DevNode){
  _POP_FX_DEVICE *v2; 
  _m_prefetchw((char *)DevNode + 296);
  if( (_InterlockedOr((volatile signed __int32 *)DevNode + 74, 8u) & 8) != 0 )
  {
    KeWaitForSingleObject((char *)DevNode + 96, Executive, 0, 0, 0i64);
  }
  else
  {
    v2 = (_POP_FX_DEVICE *)PopFxLockDevice((__int64)DevNode, 0);
    if( v2 )
      PopFxUnregisterDevice(v2);
    else
      KeSetEvent((PRKEVENT)DevNode + 4, 0);
  }
}

Referenced by:

PoFxAbandonDevice
PoFxUnregisterDevice