RtlLookupAtomInAtomTable
NTSTATUS __stdcall RtlLookupAtomInAtomTable(VOID *AtomTableHandle, WCHAR *AtomName, UINT16 *Atom){
_RTL_ATOM_TABLE_ENTRY *v6;
UINT16 v7;
int v9;
_RTL_ATOM_TABLE_ENTRY *pAtomEntry;
_RTL_ATOM_TABLE_REFERENCE *pLowBox;
UINT16 Atoma;
pAtomEntry = 0i64;
Atoma = 0;
if( !RtlpLockAtomTable((_RTL_ATOM_TABLE *)AtomTableHandle) )
return -1073741811;
if( RtlGetIntegerAtom((UINT64)AtomName, &Atoma) )
{
v7 = Atoma;
if( Atoma >= 0xC000u )
{
v7 = 0;
Atoma = 0;
v9 = -1073741811;
}
else
{
v9 = 0;
}
if( !Atom )
goto LABEL_18;
goto LABEL_9;
}
if( !*AtomName )
{
v9 = -1073741773;
goto LABEL_18;
}
v9 = RtlpHashStringToAtom((_RTL_ATOM_TABLE *)AtomTableHandle, AtomName, 1u, 0i64, 0i64, &pLowBox, &pAtomEntry);
if( v9 >= 0 )
{
v6 = pAtomEntry;
if( !pAtomEntry )
{
v9 = -1073741772;
goto LABEL_18;
}
if( !RtlpAtomMapAtomToHandleEntry((_RTL_ATOM_TABLE *)AtomTableHandle, pAtomEntry->HandleIndex) )
{
v9 = -1073741816;
goto LABEL_18;
}
v9 = 0;
if( Atom )
{
v7 = v6->Atom;
LABEL_9:
*Atom = v7;
}
}
LABEL_18:
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)AtomTableHandle + 1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((_EX_PUSH_LOCK *)AtomTableHandle + 1);
KeAbPostRelease((char *)AtomTableHandle + 8);
KeLeaveCriticalRegion();
return v9;
}Referenced by:
NtFindAtom