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