ObFastReferenceObject

CHAR *__fastcall ObFastReferenceObject(INT64 *a1){
  signed __int64 v2; 
  signed __int64 v3; 
  signed __int64 v4; 
  unsigned int v5; 
  CHAR *v6; 
  INT64 v8; 
  signed __int64 v9; 
  signed __int64 v10; 
  signed __int64 v11; 
  ULONG_PTR BugCheckParameter4; 
  _m_prefetchw(a1);
  v2 = *a1;
  if( (*a1 & 0xF) != 0 )
  {
    do
    {
      v3 = _InterlockedCompareExchange64(a1, v2 - 1, v2);
      if( v2 == v3 )
        break;
      v2 = v3;
    }
    while( (v3 & 0xF) != 0 );
  }
  v4 = v2;
  v5 = v2 & 0xF;
  v6 = (CHAR *)(v4 & 0xFFFFFFFFFFFFFFF0ui64);
  if( v5 > 1 )
    return v6;
  if( v5 )
  {
    ObReferenceObjectExWithTag(v6, 0xFui64);
    _m_prefetchw(a1);
    v9 = *a1;
    while( (v9 & 0xF) == 0 )
    {
      if( v6 != (CHAR *)(v9 & 0xFFFFFFFFFFFFFFF0ui64) )
        break;
      v10 = v9;
      v9 = _InterlockedCompareExchange64(a1, v9 + 15, v9);
      if( v10 == v9 )
        return v6;
    }
    ObpTraceObjectDereferenceIfActive((INT64)(v6 - 48), (_BYTE *)0xF, 1953261124i64, v8, BugCheckParameter4);
    v11 = _InterlockedExchangeAdd64((volatile signed __int64 *)v6 - 6, 0xFFFFFFFFFFFFFFF1ui64) - 15;
    if( v11 <= 0 )
    {
      if( *((_QWORD *)v6 - 5) )
        KeBugCheckEx(
          0x18u,
          ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ (unsigned __int8)*(v6 - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)v6 - 48) >> 8)],
          (ULONG_PTR)v6,
          6ui64,
          *((_QWORD *)v6 - 5));
      if( v11 < 0 )
        KeBugCheckEx(0x18u, 0i64, (ULONG_PTR)v6, 5ui64, v11);
      ObpDeferObjectDeletion((INT64)(v6 - 48));
    }
    return v6;
  }
  return 0i64;
}

Referenced by:

CcReferenceSharedCacheMapFileObject
ExpGetProcessInformation
MiLogPageAccess
NtOpenProcessTokenEx
ObOpenObjectByNameEx
ObOpenObjectByPointer
PfQuerySuperfetchInformation
PsImpersonateClient
PsReferenceEffectiveToken
PsReferencePrimaryToken
PspReferenceSystemDll
SeCaptureSubjectContext
SeCaptureSubjectContextEx
SeCreateClientSecurity
SeCreateClientSecurityEx