- Rewrite RtlpCreateAtomHandle to readable code and fix a problem spotted in bug 4788.

svn path=/trunk/; revision=42635
This commit is contained in:
Aleksey Bragin 2009-08-12 11:42:34 +00:00
parent f529b441b2
commit 9e804e5230

View file

@ -516,29 +516,36 @@ RtlpCreateAtomHandle(PRTL_ATOM_TABLE AtomTable, PRTL_ATOM_TABLE_ENTRY Entry)
HANDLE Handle;
USHORT HandleIndex;
/* Initialize ex handle table entry */
ExEntry.Object = Entry;
ExEntry.GrantedAccess = 0x1; /* FIXME - valid handle */
/* Create ex handle */
Handle = ExCreateHandle(AtomTable->ExHandleTable,
&ExEntry);
if (Handle != NULL)
{
HandleIndex = (USHORT)((ULONG_PTR)Handle >> 2);
/* FIXME - Handle Indexes >= 0xC000 ?! */
if ((ULONG_PTR)HandleIndex >> 2 < 0xC000)
{
Entry->HandleIndex = HandleIndex;
Entry->Atom = 0xC000 + HandleIndex;
&ExEntry);
if (!Handle) return FALSE;
return TRUE;
}
else
ExDestroyHandle(AtomTable->ExHandleTable,
Handle,
NULL);
/* Calculate HandleIndex (by getting rid of the first two bits) */
HandleIndex = (USHORT)((ULONG_PTR)Handle >> 2);
/* Index must be less than 0xC000 */
if (HandleIndex >= 0xC000)
{
/* Destroy ex handle */
ExDestroyHandle(AtomTable->ExHandleTable,
Handle,
NULL);
/* Return failure */
return FALSE;
}
return FALSE;
/* Initialize atom table entry */
Entry->HandleIndex = HandleIndex;
Entry->Atom = 0xC000 + HandleIndex;
/* Return success */
return TRUE;
}
PRTL_ATOM_TABLE_ENTRY