RtlCreateAtomTableEx

NTSTATUS __stdcall RtlCreateAtomTableEx(UINT64 NumberOfBuckets, UINT64 Flags, PVOID *AtomTableHandle){
  NTSTATUS v3; 
  unsigned int v5; 
  int v6; 
  NTSTATUS result; 
  _RTL_ATOM_TABLE *Atom; 
  _RTL_ATOM_TABLE *v9; 
  UINT64 v10; 
  v10 = 0i64;
  v3 = 0;
  v5 = Flags;
  if( *AtomTableHandle )
    return v3;
  v6 = 37;
  if( (unsigned int)NumberOfBuckets > 1 )
    v6 = NumberOfBuckets;
  result = RtlULongLongMult(0x30ui64, (unsigned int)(v6 - 1), &v10);
  if( result >= 0 )
  {
    if( v10 + 40 < v10 )
      return -1073741675;
    Atom = (_RTL_ATOM_TABLE *)RtlpAllocateAtom(v10 + 40, 0x546D7441ui64);
    v9 = Atom;
    if( !Atom )
      return -1073741801;
    memset((INT64)Atom, 0i64);
    v9->NumberOfBuckets = v6;
    if( RtlpInitializeHandleTableForAtomTable((INT64)v9) )
    {
      RtlpInitializeLockAtomTable(v9);
      v9->Signature = 1836020801;
      v9->ReferenceCount = 1;
      v9->Flags = v5;
      *AtomTableHandle = v9;
    }
    else
    {
      v3 = -1073741801;
      RtlpFreeAtom(v9);
    }
    return v3;
  }
  return result;
}

Referenced by:

RtlCreateAtomTable