AlpcReferenceBlobByHandle

_EX_PUSH_LOCK *__fastcall AlpcReferenceBlobByHandle(
        _ALPC_HANDLE_TABLE *HandleTable,
        VOID *Handle,
        const _BLOB_TYPE *ResourceType){
  int v4; 
  _EX_PUSH_LOCK *p_Lock; 
  _EX_PUSH_LOCK *Object; 
  __int64 v8; 
  int v10[10]; 
  v4 = (int)Handle;
  if( !HandleTable )
    return 0i64;
  p_Lock = &HandleTable->Lock;
  ExAcquirePushLockSharedEx((UINT64)&HandleTable->Lock, 0i64);
  if( (unsigned int)(v4 - 16) < HandleTable->TotalHandles
    && (Object = (_EX_PUSH_LOCK *)HandleTable->Handles[v4 - 16].Object) != 0i64
    && *((unsigned __int8 *)&Object[-4].0 + 1) == ResourceType->ResourceId
    && (LODWORD(v8) = AlpcpReferenceBlob(Object), v8) )
  {
    if( _InterlockedCompareExchange64((volatile signed __int64 *)p_Lock, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((INT64 *)p_Lock);
    KeAbPostRelease(p_Lock);
    if( (*(_BYTE *)&Object[-4].0 & 4) != 0 )
    {
      _InterlockedOr(v10, 0);
      if( (Object[-2].Value & 1) != 0 )
        ExfAcquireReleasePushLockExclusive(&Object[-2]);
    }
    return Object;
  }
  else
  {
    if( _InterlockedCompareExchange64((volatile signed __int64 *)p_Lock, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((INT64 *)p_Lock);
    KeAbPostRelease(p_Lock);
    return 0i64;
  }
}

Referenced by:

AlpcpCaptureSecurityAttributeInternal
AlpcpCaptureViewAttributeInternal
AlpcpLookupMessage
NtAlpcCreateSectionView
NtAlpcDeletePortSection
NtAlpcDeleteResourceReserve
NtAlpcDeleteSecurityContext
NtAlpcRevokeSecurityContext