RtlpDereferenceAtom
INT64 __fastcall RtlpDereferenceAtom(
_RTL_ATOM_TABLE_ENTRY *AtomEntry,
_RTL_ATOM_TABLE_REFERENCE *LowBox,
_RTL_ATOM_TABLE *AtomTable){
INT64 result;
bool v6;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
if( (LowBox->Flags & 1) != 0 )
goto LABEL_3;
v6 = LowBox->ReferenceCount-- == 1;
if( !v6 )
goto LABEL_3;
if( LowBox == &AtomEntry->Reference )
goto LABEL_5;
Flink = LowBox->LowBoxList.Flink;
if( (_RTL_ATOM_TABLE_REFERENCE *)LowBox->LowBoxList.Flink->Blink != LowBox
|| (Blink = LowBox->LowBoxList.Blink, (_RTL_ATOM_TABLE_REFERENCE *)Blink->Flink != LowBox) )
{
__fastfail(3u);
}
Blink->Flink = Flink;
Flink->Blink = Blink;
RtlpFreeAtom(LowBox);
if( (AtomEntry->Reference.Flags & 1) == 0
&& (v6 = AtomEntry->Reference.ReferenceCount == 1, --AtomEntry->Reference.ReferenceCount, v6) )
{
LABEL_5:
RtlpFreeAllAtom(AtomEntry, AtomTable);
LOBYTE(result) = 1;
}
else
{
LABEL_3:
LOBYTE(result) = 0;
}
return result;
}Referenced by:
RtlDeleteAtomFromAtomTable
RtlDestroyLowBoxAtoms