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