ObReferenceObjectByName

NTSTATUS __stdcall ObReferenceObjectByName(
        _UNICODE_STRING *ObjectName,
        UINT64 Attributes,
        _ACCESS_STATE *AccessState,
        UINT64 DesiredAccess,
        _OBJECT_TYPE *ObjectType,
        INT8 AccessMode,
        VOID *ParseContext,
        VOID **Object){
  unsigned int v9; 
  unsigned int v11; 
  NTSTATUS result; 
  _EJOB *Silo; 
  unsigned __int64 v14; 
  INT64 *v15; 
  CHAR v16; 
  int v17; 
  PADAPTER_OBJECT DmaAdapter; 
  _UNICODE_STRING CapturedObjectName; 
  _LEARNING_MODE_OBJECT_INFORMATION ObjectInformation[4]; 
  __int128 v21; 
  __int128 v22; 
  __int64 v23; 
  _OBP_LOOKUP_CONTEXT LookupContext; 
  char v25[160]; 
  _AUX_ACCESS_DATA AuxData; 

  v9 = Attributes;
  v11 = DesiredAccess;
  memset(&AuxData, 0i64, sizeof(AuxData));
  DmaAdapter = 0i64;
  CapturedObjectName = 0i64;
  memset(v25, 0i64, sizeof(v25));
  v23 = 0i64;
  memset(&LookupContext, 0, sizeof(LookupContext));
  *(_OWORD *)ObjectInformation = 0i64;
  v21 = 0i64;
  v22 = 0i64;
  if( !ObjectName )
    return -1073741773;
  result = ObpCaptureObjectName(AccessMode, ObjectName, &CapturedObjectName, 1ui64);
  if( result < 0 )
    return result;
  if( !CapturedObjectName.Length )
    return -1073741773;
  if( AccessState
    || (AccessState = (_ACCESS_STATE *)v25,
        v17 = SeCreateAccessState((_ACCESS_STATE *)v25, &AuxData, v11, &ObjectType->TypeInfo.GenericMapping),
        v17 >= 0) )
  {
    Silo = PsGetCurrentSilo();
    v17 = ObpLookupObjectName(
            0i64,
            &CapturedObjectName,
            v9,
            ObjectType,
            AccessMode,
            ParseContext,
            0i64,
            0i64,
            Silo,
            AccessState,
            &LookupContext,
            0i64,
            (VOID **)&DmaAdapter);
    ObpReleaseLookupContext(&LookupContext);
    *Object = 0i64;
    if( v17 >= 0 )
    {
      v14 = LOBYTE(DmaAdapter[-1].AllocationState) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)DmaAdapter - 48) >> 8);
      *(_QWORD *)&v22 = 0i64;
      *(_QWORD *)&v21 = ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ v14] + 16;
      *((_QWORD *)&v21 + 1) = &CapturedObjectName;
      SeSetLearningModeObjectInformation(ObjectInformation);
      LOBYTE(v15) = AccessMode;
      if( ObpCheckObjectReference(DmaAdapter, AccessState, v16, v15) )
        *Object = DmaAdapter;
      else
        HalPutDmaAdapter(DmaAdapter);
      SeClearLearningModeObjectInformation();
    }
    if( AccessState == (_ACCESS_STATE *)v25 )
    {
      SepDeleteAccessState(AccessState);
      SeReleaseSubjectContext((PSECURITY_SUBJECT_CONTEXT)AccessState + 1);
    }
  }
  ObpFreeObjectNameBuffer(&CapturedObjectName);
  return v17;
}

Referenced by:

AlpcpCreateClientPort
CmLoadDifferencingKey
IopGetDriverPathInformation
IopGetLegacyVetoListDrivers
ObShutdownSystem