RtlpDereferenceAtom
UINT8 __stdcall RtlpDereferenceAtom(
_RTL_ATOM_TABLE_ENTRY *AtomEntry,
_RTL_ATOM_TABLE_REFERENCE *LowBox,
_RTL_ATOM_TABLE *AtomTable){
bool v5;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
if( (LowBox->Flags & 1) != 0 )
return 0;
v5 = LowBox->ReferenceCount-- == 1;
if( !v5 )
return 0;
if( LowBox != &AtomEntry->Reference )
{
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 )
return 0;
v5 = AtomEntry->Reference.ReferenceCount-- == 1;
if( !v5 )
return 0;
}
RtlpFreeAllAtom(AtomEntry, AtomTable);
return 1;
}Referenced by:
RtlDeleteAtomFromAtomTable
RtlDestroyLowBoxAtoms