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