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.