ObReferenceObjectSafeWithTag

INT8 __fastcall ObReferenceObjectSafeWithTag(INT64 a1, INT64 a2){
  _OBJECT_HEADER *v2; 
  signed __int64 PointerCount; 
  signed __int64 v4; 

  v2 = (_OBJECT_HEADER *)(a1 - 48);
  _m_prefetchw(v2);
  PointerCount = v2->PointerCount;
  if( !v2->PointerCount )
    return 0;
  while( 1 )
  {
    v4 = PointerCount;
    PointerCount = _InterlockedCompareExchange64(&v2->PointerCount, PointerCount + 1, PointerCount);
    if( v4 == PointerCount )
      break;
    if( !PointerCount )
      return 0;
  }
  if( ObpTraceFlags )
    ObpPushStackInfo(v2, 1u, 1ui64, (unsigned int)a2);
  return 1;
}

Referenced by:

AlpcpLookasidePacketCallbackRoutine
ExpGetNextCallback
ExpGetProcessInformation
HalpDmaFindAdapterByDeviceObject
IoNotifyQuotaState
KiAbProcessContextSwitch
KiAbProcessThreadLocks
KiMonitorCacheErrata
MiCapturePfnVm
MiEmptyPageAccessLog
MiSelectSessionAttachProcess
MiViewMayContainPage
PopEtGetNextEnergyTracker
PsGetNextPartitionUnsafe
PsGetNextProcess
PsGetNextProcessThread
PsGetPreviousProcess
PspAddProcessToWorkingSetChangeList
PspEnforceLimitsProcessCallback
PspEnumJobsAndProcessesInJobHierarchy
PspExitThread
PspGetNextChildJob
PspGetNextJob
PspGetPreviousProcessThread
PspJobCycleTimeNotificationDpcRoutine
PspQueryProcessInterferenceCountCallback
SepCleanupLUIDDeviceMapDirectory