{
PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket;
PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry;
-
+
DPRINT("RtlDestroyAtomTable (AtomTable %p)\n", AtomTable);
if (!RtlpLockAtomTable(AtomTable))
if (HashLink != NULL)
{
ULONG AtomNameLen = wcslen(AtomName);
-
+
if (AtomNameLen > RTL_MAXIMUM_ATOM_LENGTH)
{
Status = STATUS_INVALID_PARAMETER;
if (Atom >= 0xC000)
{
PRTL_ATOM_TABLE_ENTRY Entry;
-
+
RtlpLockAtomTable(AtomTable);
Entry = RtlpGetAtomEntry(AtomTable,
{
ULONG Length;
BOOL Unlock = FALSE;
-
+
union
{
/* A RTL_ATOM_TABLE_ENTRY has a "WCHAR Name[1]" entry at the end.
if (Entry != NULL && Entry->Atom == (USHORT)Atom)
{
DPRINT("Atom name: %wZ\n", &Entry->Name);
-
+
if (RefCount != NULL)
{
*RefCount = Entry->ReferenceCount;
PRTL_ATOM_TABLE_ENTRY CurrentEntry;
ULONG Atoms = 0;
NTSTATUS Status = STATUS_SUCCESS;
-
+
RtlpLockAtomTable(AtomTable);
-
+
LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets;
for (CurrentBucket = AtomTable->Buckets;
CurrentBucket != LastBucket;
CurrentEntry = CurrentEntry->HashLink;
}
}
-
+
*AtomCount = Atoms;
-
+
RtlpUnlockAtomTable(AtomTable);
return Status;