RtlDestroyLowBoxAtoms

VOID __stdcall RtlDestroyLowBoxAtoms(VOID *AtomTableHandle, UINT64 LowBoxID){
  int v2; 
  unsigned int v4; 
  _RTL_ATOM_TABLE_ENTRY **i; 
  _RTL_ATOM_TABLE_ENTRY *v6; 
  _LIST_ENTRY *j; 
  _RTL_ATOM_TABLE_ENTRY *v8; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *Flink; 
  VOID **p_Flink; 

  v2 = LowBoxID;
  if( RtlpLockAtomTable((_RTL_ATOM_TABLE *)AtomTableHandle) )
  {
    v4 = 0;
    for( i = (_RTL_ATOM_TABLE_ENTRY **)((char *)AtomTableHandle + 32); v4 < *((_DWORD *)AtomTableHandle + 7); ++v4 )
    {
      v6 = *i++;
      while( 1 )
      {
        v8 = v6;
        if( !v6 )
          break;
        v6 = v6->HashLink;
        for( j = v8->Reference.LowBoxList.Flink; j != (_LIST_ENTRY *)&v8->Reference; j = j->Flink )
        {
          v9 = j;
          if( LODWORD(j[1].Flink) == v2 )
          {
            Flink = j->Flink;
            p_Flink = (VOID **)&j->Blink->Flink;
            j = (_LIST_ENTRY *)p_Flink;
            if( v9->Flink->Blink != v9 || *p_Flink != v9 )
              __fastfail(3u);
            *p_Flink = Flink;
            Flink->Blink = (_LIST_ENTRY *)p_Flink;
            RtlpFreeAtom(v9);
            if( RtlpDereferenceAtom(v8, &v8->Reference, (_RTL_ATOM_TABLE *)AtomTableHandle) )
              break;
          }
        }
      }
    }
    RtlpUnlockAtomTable((_RTL_ATOM_TABLE *)AtomTableHandle);
  }
}

Referenced by:

ExRemoveLowBoxAtomReferences