RtlpAllocateAtomTableEntry

_RTL_ATOM_TABLE_ENTRY *__stdcall RtlpAllocateAtomTableEntry(
        UINT64 NameLength,
        _RTL_ATOM_TABLE_REFERENCE **pLowBox,
        UINT64 Flags){
  char v3; 
  UINT64 v4; 
  _RTL_ATOM_TABLE_ENTRY *Atom; 
  _RTL_ATOM_TABLE_ENTRY *v7; 
  _RTL_ATOM_TABLE_REFERENCE *p_Reference; 
  unsigned int LowBoxId; 
  _RTL_ATOM_TABLE_REFERENCE *v10; 
  _LIST_ENTRY *Flink; 

  v3 = Flags;
  v4 = (unsigned int)NameLength + 44i64;
  if( v4 >= 0x2C )
  {
    Atom = (_RTL_ATOM_TABLE_ENTRY *)RtlpAllocateAtom(v4, 0x416D7441ui64);
    v7 = Atom;
    if( Atom )
    {
      Atom->HashLink = 0i64;
      Atom->Reference.ReferenceCount = 1;
      Atom->Reference.Flags = v3 & 2;
      p_Reference = &Atom->Reference;
      Atom->Reference.LowBoxList.Blink = &Atom->Reference.LowBoxList;
      Atom->Reference.LowBoxList.Flink = &Atom->Reference.LowBoxList;
      Atom->Reference.LowBoxID = 0;
      LowBoxId = RtlpQueryLowBoxId();
      if( !LowBoxId )
      {
        v10 = p_Reference;
LABEL_5:
        *pLowBox = v10;
        return v7;
      }
      v10 = (_RTL_ATOM_TABLE_REFERENCE *)RtlpAllocateAtom(0x18ui64, 0x4C6D7441ui64);
      if( v10 )
      {
        *(_DWORD *)&v10->ReferenceCount = 1;
        v10->LowBoxID = LowBoxId;
        Flink = p_Reference->LowBoxList.Flink;
        if( (_RTL_ATOM_TABLE_REFERENCE *)p_Reference->LowBoxList.Flink->Blink != p_Reference )
          __fastfail(3u);
        v10->LowBoxList.Flink = Flink;
        v10->LowBoxList.Blink = &p_Reference->LowBoxList;
        Flink->Blink = &v10->LowBoxList;
        p_Reference->LowBoxList.Flink = &v10->LowBoxList;
        goto LABEL_5;
      }
      RtlpFreeAtom(v7);
    }
  }
  return 0i64;
}

Referenced by:

RtlAddAtomToAtomTableEx