RtlPinAtomInAtomTable
NTSTATUS __stdcall RtlPinAtomInAtomTable(VOID *AtomTableHandle, UINT64 Atom){
unsigned __int16 v2;
int v4;
_RTL_ATOM_TABLE_ENTRY *v5;
_RTL_ATOM_TABLE_REFERENCE *v6;
NTSTATUS v8;
v2 = Atom;
if( !RtlpLockAtomTable((_RTL_ATOM_TABLE *)AtomTableHandle) )
return -1073741811;
v4 = -1073741816;
v8 = -1073741816;
if( v2 < 0xC000u )
{
if( v2 )
v4 = 0;
v8 = v4;
}
else
{
v5 = RtlpAtomMapAtomToHandleEntry((_RTL_ATOM_TABLE *)AtomTableHandle, v2 & 0x3FFF);
if( v5 )
{
if( v5->Atom == v2 )
{
v6 = RtlpLookupLowBox((_RTL_ATOM_TABLE *)AtomTableHandle, v5, 0);
if( v6 )
{
v8 = 0;
v6->Flags |= 1u;
}
}
}
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)AtomTableHandle + 1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((_EX_PUSH_LOCK *)AtomTableHandle + 1);
KeAbPostRelease((char *)AtomTableHandle + 8);
KeLeaveCriticalRegion();
return v8;
}Referenced by:
No references.