PopFxUnregisterDeviceOrWait

VOID __stdcall PopFxUnregisterDeviceOrWait(_DEVICE_NODE *DevNode){
  _POP_FX_DEVICE *v2; 

  _m_prefetchw((const void *)&DevNode->PowerFlags);
  if( (_InterlockedOr(&DevNode->PowerFlags, 8u) & 8) != 0 )
  {
    KeWaitForSingleObject((UINT64)&DevNode->gap5C[4], 0, 0, 0, 0i64);
  }
  else
  {
    v2 = PopFxLockDevice(DevNode, 0);
    if( v2 )
      PopFxUnregisterDevice(v2);
    else
      KeSetEvent((PRKEVENT)&DevNode->gap5C[4], 0, 0);
  }
}

Referenced by:

PoFxAbandonDevice
PoFxUnregisterDevice