RtlpAllocateAtomTableEntry

INT64 *__fastcall RtlpAllocateAtomTableEntry(UINT64 a1, INT64 **a2, CHAR a3){
  UINT64 v4; 
  INT64 *Atom; 
  INT64 *v7; 
  INT64 *v8; 
  int LowBoxId; 
  INT64 *v10; 
  INT64 v12; 
  v4 = (unsigned int)a1 + 44i64;
  if( v4 >= 0x2C )
  {
    Atom = (INT64 *)RtlpAllocateAtom(v4, 0x416D7441ui64);
    v7 = Atom;
    if( Atom )
    {
      *Atom = 0i64;
      *((_WORD *)Atom + 18) = 1;
      *((_WORD *)Atom + 19) = a3 & 2;
      v8 = Atom + 2;
      Atom[3] = (INT64)(Atom + 2);
      Atom[2] = (INT64)(Atom + 2);
      *((_DWORD *)Atom + 8) = 0;
      LowBoxId = RtlpQueryLowBoxId();
      if( !LowBoxId )
      {
        v10 = v8;
LABEL_5:
        *a2 = v10;
        return v7;
      }
      v10 = (INT64 *)RtlpAllocateAtom(0x18ui64, 0x4C6D7441ui64);
      if( v10 )
      {
        *((_DWORD *)v10 + 5) = 1;
        *((_DWORD *)v10 + 4) = LowBoxId;
        v12 = *v8;
        if( *(INT64 **)(*v8 + 8) != v8 )
          __fastfail(3u);
        *v10 = v12;
        v10[1] = (INT64)v8;
        *(_QWORD *)(v12 + 8) = v10;
        *v8 = (INT64)v10;
        goto LABEL_5;
      }
      RtlpFreeAtom(v7);
    }
  }
  return 0i64;
}

Referenced by:

RtlAddAtomToAtomTableEx