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