RtlDeleteAtomFromAtomTable

INT64 __fastcall RtlDeleteAtomFromAtomTable(VOID *AtomTableHandle, UINT16 Atom){
  unsigned int v4; 
  _RTL_ATOM_TABLE_ENTRY *v5; 
  INT64 v6; 
  _RTL_ATOM_TABLE_ENTRY *v7; 
  _RTL_ATOM_TABLE_REFERENCE *v8; 
  if( !RtlpLockAtomTable((_RTL_ATOM_TABLE *)AtomTableHandle) )
    return 3221225485i64;
  v4 = -1073741816;
  if( Atom < 0xC000u )
  {
    if( Atom )
      v4 = 0;
  }
  else
  {
    v5 = RtlpAtomMapAtomToHandleEntry((_RTL_ATOM_TABLE *)AtomTableHandle, Atom & 0x3FFF);
    v7 = v5;
    if( v5 )
    {
      if( v5->Atom == Atom )
      {
        LOBYTE(v6) = 1;
        v8 = RtlpLookupLowBox((_RTL_ATOM_TABLE *)AtomTableHandle, v5, v6);
        if( v8 )
        {
          v4 = 0;
          if( (v8->Flags & 1) != 0 )
            v4 = 1073741849;
          else
            RtlpDereferenceAtom(v7, v8, (_RTL_ATOM_TABLE *)AtomTableHandle);
        }
      }
    }
  }
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)AtomTableHandle + 1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)AtomTableHandle + 1);
  KeAbPostRelease((char *)AtomTableHandle + 8);
  KeLeaveCriticalRegion();
  return v4;
}

Referenced by:

NtDeleteAtom