ObpGrantAccess

NTSTATUS __stdcall ObpGrantAccess(
        _OB_OPEN_REASON OpenReason,
        VOID *Object,
        _ACCESS_STATE *AccessState,
        INT8 AccessMode,
        UINT64 Attributes,
        UINT64 *GrantedAccess){
  unsigned __int64 v8; 
  _KPROCESSOR_MODE v9; 
  unsigned __int64 v10; 
  NTSTATUS result; 
  INT64 AccessStatus; 

  LODWORD(AccessStatus) = 0;
  v8 = (unsigned __int8)*((char *)Object - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)Object - 48) >> 8);
  v9 = 1;
  v10 = (unsigned __int8)ObHeaderCookie ^ v8;
  if( (Attributes & 0x400) == 0 )
    v9 = (unsigned __int8)AccessMode;
  if( (unsigned int)(OpenReason - 1) > 1 )
  {
    result = ObpAdjustCreatorAccessState(AccessState, v9, (_OBJECT_TYPE *)ObTypeIndexTable[v10], Object);
    if( result >= 0 )
      goto LABEL_5;
  }
  else
  {
    if( ObCheckObjectAccess(Object, AccessState, 1u, v9, &AccessStatus) )
    {
LABEL_5:
      *(_DWORD *)GrantedAccess = *((_DWORD *)AccessState + 5);
      return 0;
    }
    return AccessStatus;
  }
  return result;
}

Referenced by:

ObpInsertOrLocateNamedObject