ObReferenceObjectSafe

INT8 __fastcall ObReferenceObjectSafe(INT64 a1){
  _OBJECT_HEADER *v1; 
  signed __int64 PointerCount; 
  signed __int64 v3; 

  v1 = (_OBJECT_HEADER *)(a1 - 48);
  _m_prefetchw(v1);
  PointerCount = v1->PointerCount;
  if( !v1->PointerCount )
    return 0;
  while( 1 )
  {
    v3 = PointerCount;
    PointerCount = _InterlockedCompareExchange64(&v1->PointerCount, PointerCount + 1, PointerCount);
    if( v3 == PointerCount )
      break;
    if( !PointerCount )
      return 0;
  }
  if( ObpTraceFlags )
    ObpPushStackInfo(v1, 1u, 1ui64, 0x746C6644ui64);
  return 1;
}

Referenced by:

AlpcpCancelMessage
AlpcpDisconnectPort
AlpcpDispatchConnectionRequest
AlpcpDispatchNewMessage
AlpcpFlushMessagesPort
AlpcpPortQueryServerInfo
AlpcpProcessSynchronousRequest
AlpcpQueryRemoteView
AlpcpReceiveLegacyMessage
AlpcpReferenceAndLockTargetPortsAndCommunicationInfo
AlpcpReferenceConnectedPort
AlpcpReferenceMessageByWaitingThread
AlpcpReferenceReplyTargetPorts
CmUnRegisterCallback
HalpDmaFindAdapterByDeviceId
IovpBuildDriverObjectList
KiSwapToUmsThread
ObpCreateTypeArray
PspDisassociateUmsThreadFromPrimary
PspRundownUmsThreadForApcDelivery
WmipProcessEvent