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