From: Aleksey Bragin Date: Wed, 12 Aug 2009 11:42:34 +0000 (+0000) Subject: - Rewrite RtlpCreateAtomHandle to readable code and fix a problem spotted in bug... X-Git-Tag: ReactOS-0.3.11~1216 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=9e804e5230f1d7c9693d1ba317e8c5a7bc39f133 - Rewrite RtlpCreateAtomHandle to readable code and fix a problem spotted in bug 4788. svn path=/trunk/; revision=42635 --- diff --git a/reactos/ntoskrnl/rtl/libsupp.c b/reactos/ntoskrnl/rtl/libsupp.c index 850d66747d2..9115683e444 100644 --- a/reactos/ntoskrnl/rtl/libsupp.c +++ b/reactos/ntoskrnl/rtl/libsupp.c @@ -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) + &ExEntry); + if (!Handle) return FALSE; + + /* 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) { - HandleIndex = (USHORT)((ULONG_PTR)Handle >> 2); - /* FIXME - Handle Indexes >= 0xC000 ?! */ - if ((ULONG_PTR)HandleIndex >> 2 < 0xC000) - { - Entry->HandleIndex = HandleIndex; - Entry->Atom = 0xC000 + HandleIndex; - - return TRUE; - } - else - ExDestroyHandle(AtomTable->ExHandleTable, - Handle, - NULL); + /* 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