directly translate handles to indexes in ex/handle.c
Modified: trunk/reactos/ntoskrnl/ex/handle.c
Modified: trunk/reactos/ntoskrnl/include/internal/ex.h
Modified: trunk/reactos/ntoskrnl/include/internal/ob.h
Modified: trunk/reactos/ntoskrnl/ob/handle.c
Modified: trunk/reactos/ntoskrnl/ob/wait.c
Modified: trunk/reactos/ntoskrnl/ps/process.c
Modified: trunk/reactos/ntoskrnl/ps/thread.c
Modified: trunk/reactos/ntoskrnl/rtl/libsupp.c
_____
Modified: trunk/reactos/ntoskrnl/ex/handle.c
--- trunk/reactos/ntoskrnl/ex/handle.c 2005-08-07 23:37:59 UTC (rev
17190)
+++ trunk/reactos/ntoskrnl/ex/handle.c 2005-08-07 23:43:58 UTC (rev
17191)
@@ -77,6 +77,11 @@
#define IS_VALID_EX_HANDLE(index)
\
(((index) & ~VALID_HANDLE_MASK) == 0)
+#define HANDLE_TO_EX_HANDLE(handle)
\
+ (LONG)(((LONG)(handle) >> 2) - 1)
+#define EX_HANDLE_TO_HANDLE(exhandle)
\
+ (HANDLE)(((exhandle) + 1) << 2)
+
static BOOLEAN ExpInitialized = FALSE;
/***********************************************************************
*******/
@@ -491,7 +496,7 @@
static PHANDLE_TABLE_ENTRY
ExpAllocateHandleTableEntry(IN PHANDLE_TABLE HandleTable,
- OUT PLONG Handle)
+ OUT PHANDLE Handle)
{
PHANDLE_TABLE_ENTRY Entry = NULL;
@@ -520,7 +525,7 @@
Entry = &HandleTable->Table[tli][mli][eli];
- *Handle = HandleTable->FirstFreeTableEntry;
+ *Handle = EX_HANDLE_TO_HANDLE(HandleTable->FirstFreeTableEntry);
/* save the index to the next free handle (if available) */
HandleTable->FirstFreeTableEntry = Entry->u2.NextFreeTableEntry;
@@ -629,7 +634,7 @@
Entry->u1.ObAttributes = EX_HANDLE_ENTRY_LOCKED;
Entry->u2.NextFreeTableEntry = 0;
- *Handle = HandleTable->NextIndexNeedingPool;
+ *Handle = EX_HANDLE_TO_HANDLE(HandleTable->NextIndexNeedingPool);
HandleTable->HandleCount++;
@@ -803,12 +808,12 @@
FALSE);
}
-LONG
+HANDLE
ExCreateHandle(IN PHANDLE_TABLE HandleTable,
IN PHANDLE_TABLE_ENTRY Entry)
{
PHANDLE_TABLE_ENTRY NewHandleTableEntry;
- LONG Handle = EX_INVALID_HANDLE;
+ HANDLE Handle = NULL;
PAGED_CODE();
@@ -841,20 +846,23 @@
BOOLEAN
ExDestroyHandle(IN PHANDLE_TABLE HandleTable,
- IN LONG Handle)
+ IN HANDLE Handle)
{
PHANDLE_TABLE_ENTRY HandleTableEntry;
+ LONG ExHandle;
BOOLEAN Ret = FALSE;
PAGED_CODE();
ASSERT(HandleTable);
+
+ ExHandle = HANDLE_TO_EX_HANDLE(Handle);
KeEnterCriticalRegion();
ExAcquireHandleTableLockExclusive(HandleTable);
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
- Handle);
+ ExHandle);
if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable,
HandleTableEntry))
{
@@ -862,7 +870,7 @@
the contention event since other locks on this entry will fail
*/
ExpFreeHandleTableEntry(HandleTable,
HandleTableEntry,
- Handle);
+ ExHandle);
Ret = TRUE;
}
@@ -875,7 +883,7 @@
VOID
ExDestroyHandleByEntry(IN PHANDLE_TABLE HandleTable,
IN PHANDLE_TABLE_ENTRY Entry,
- IN LONG Handle)
+ IN HANDLE Handle)
{
PAGED_CODE();
@@ -894,7 +902,7 @@
the contention event since other locks on this entry will fail */
ExpFreeHandleTableEntry(HandleTable,
Entry,
- Handle);
+ HANDLE_TO_EX_HANDLE(Handle));
ExReleaseHandleTableLock(HandleTable);
KeLeaveCriticalRegion();
@@ -902,7 +910,7 @@
PHANDLE_TABLE_ENTRY
ExMapHandleToPointer(IN PHANDLE_TABLE HandleTable,
- IN LONG Handle)
+ IN HANDLE Handle)
{
PHANDLE_TABLE_ENTRY HandleTableEntry;
@@ -911,7 +919,7 @@
ASSERT(HandleTable);
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
- Handle);
+
HANDLE_TO_EX_HANDLE(Handle));
if (HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable,
HandleTableEntry))
{
DPRINT("ExMapHandleToPointer HT:0x%p Entry:0x%p locked\n",
HandleTable, HandleTableEntry);
@@ -923,7 +931,7 @@
BOOLEAN
ExChangeHandle(IN PHANDLE_TABLE HandleTable,
- IN LONG Handle,
+ IN HANDLE Handle,
IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback,
IN PVOID Context)
{
@@ -938,7 +946,7 @@
KeEnterCriticalRegion();
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
- Handle);
+
HANDLE_TO_EX_HANDLE(Handle));
if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable,
HandleTableEntry))
{
_____
Modified: trunk/reactos/ntoskrnl/include/internal/ex.h
--- trunk/reactos/ntoskrnl/include/internal/ex.h 2005-08-07
23:37:59 UTC (rev 17190)
+++ trunk/reactos/ntoskrnl/include/internal/ex.h 2005-08-07
23:43:58 UTC (rev 17191)
@@ -86,8 +86,6 @@
#define EX_HANDLE_TABLE_CLOSING 0x1
-#define EX_INVALID_HANDLE (~0)
-
#define EX_HANDLE_ENTRY_FLAGSMASK (EX_HANDLE_ENTRY_LOCKED |
\
EX_HANDLE_ENTRY_PROTECTFROMCLOSE |
\
EX_HANDLE_ENTRY_INHERITABLE |
\
@@ -145,7 +143,7 @@
IN PHANDLE_TABLE_ENTRY Entry
);
-LONG
+HANDLE
ExCreateHandle(
IN PHANDLE_TABLE HandleTable,
IN PHANDLE_TABLE_ENTRY Entry
@@ -154,26 +152,26 @@
BOOLEAN
ExDestroyHandle(
IN PHANDLE_TABLE HandleTable,
- IN LONG Handle
+ IN HANDLE Handle
);
VOID
ExDestroyHandleByEntry(
IN PHANDLE_TABLE HandleTable,
IN PHANDLE_TABLE_ENTRY Entry,
- IN LONG Handle
+ IN HANDLE Handle
);
PHANDLE_TABLE_ENTRY
ExMapHandleToPointer(
IN PHANDLE_TABLE HandleTable,
- IN LONG Handle
+ IN HANDLE Handle
);
BOOLEAN
ExChangeHandle(
IN PHANDLE_TABLE HandleTable,
- IN LONG Handle,
+ IN HANDLE Handle,
IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback,
IN PVOID Context
);
_____
Modified: trunk/reactos/ntoskrnl/include/internal/ob.h
--- trunk/reactos/ntoskrnl/include/internal/ob.h 2005-08-07
23:37:59 UTC (rev 17190)
+++ trunk/reactos/ntoskrnl/include/internal/ob.h 2005-08-07
23:43:58 UTC (rev 17191)
@@ -62,11 +62,6 @@
#define OBJECT_ALLOC_SIZE(ObjectSize)
((ObjectSize)+sizeof(OBJECT_HEADER))
-#define HANDLE_TO_EX_HANDLE(handle)
\
- (LONG)(((LONG)(handle) >> 2) - 1)
-#define EX_HANDLE_TO_HANDLE(exhandle)
\
- (HANDLE)(((exhandle) + 1) << 2)
-
extern PDIRECTORY_OBJECT NameSpaceRoot;
extern POBJECT_TYPE ObSymbolicLinkType;
extern PHANDLE_TABLE ObpKernelHandleTable;
_____
Modified: trunk/reactos/ntoskrnl/ob/handle.c
--- trunk/reactos/ntoskrnl/ob/handle.c 2005-08-07 23:37:59 UTC (rev
17190)
+++ trunk/reactos/ntoskrnl/ob/handle.c 2005-08-07 23:43:58 UTC (rev
17191)
@@ -90,7 +90,6 @@
{
PHANDLE_TABLE HandleTable;
PHANDLE_TABLE_ENTRY HandleTableEntry;
- LONG ExHandle;
PAGED_CODE();
@@ -99,18 +98,17 @@
if(ObIsKernelHandle(Handle, ExGetPreviousMode()))
{
HandleTable = ObpKernelHandleTable;
- ExHandle = HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handle));
+ Handle = ObKernelHandleToHandle(Handle);
}
else
{
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handle);
}
KeEnterCriticalRegion();
HandleTableEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if (HandleTableEntry == NULL)
{
KeLeaveCriticalRegion();
@@ -135,7 +133,6 @@
{
PHANDLE_TABLE HandleTable;
PHANDLE_TABLE_ENTRY HandleTableEntry;
- LONG ExHandle;
PAGED_CODE();
@@ -144,18 +141,17 @@
if(ObIsKernelHandle(Handle, ExGetPreviousMode()))
{
HandleTable = ObpKernelHandleTable;
- ExHandle = HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handle));
+ Handle = ObKernelHandleToHandle(Handle);
}
else
{
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handle);
}
KeEnterCriticalRegion();
HandleTableEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if (HandleTableEntry == NULL)
{
KeLeaveCriticalRegion();
@@ -190,7 +186,6 @@
PHANDLE_TABLE_ENTRY HandleEntry;
PVOID Body;
POBJECT_HEADER ObjectHeader;
- LONG ExHandle = HANDLE_TO_EX_HANDLE(Handle);
PAGED_CODE();
@@ -199,7 +194,7 @@
KeEnterCriticalRegion();
HandleEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if(HandleEntry != NULL)
{
if(HandleEntry->u1.ObAttributes &
EX_HANDLE_ENTRY_PROTECTFROMCLOSE)
@@ -220,7 +215,7 @@
/* destroy and unlock the handle entry */
ExDestroyHandleByEntry(HandleTable,
HandleEntry,
- ExHandle);
+ Handle);
KeLeaveCriticalRegion();
@@ -245,9 +240,8 @@
HANDLE_TABLE_ENTRY NewHandleEntry;
PVOID ObjectBody;
POBJECT_HEADER ObjectHeader;
- LONG ExTargetHandle;
- LONG ExSourceHandle;
ULONG NewHandleCount;
+ HANDLE NewTargetHandle;
PAGED_CODE();
@@ -261,12 +255,10 @@
SourceHandleTable = SourceProcess->ObjectTable;
}
- ExSourceHandle = HANDLE_TO_EX_HANDLE(SourceHandle);
-
KeEnterCriticalRegion();
SourceHandleEntry = ExMapHandleToPointer(SourceHandleTable,
- ExSourceHandle);
+ SourceHandle);
if (SourceHandleEntry == NULL)
{
KeLeaveCriticalRegion();
@@ -316,9 +308,9 @@
KeLeaveCriticalRegion();
/* attempt to create the new handle */
- ExTargetHandle = ExCreateHandle(TargetProcess->ObjectTable,
- &NewHandleEntry);
- if (ExTargetHandle != EX_INVALID_HANDLE)
+ NewTargetHandle = ExCreateHandle(TargetProcess->ObjectTable,
+ &NewHandleEntry);
+ if (NewTargetHandle != NULL)
{
if (Options & DUPLICATE_CLOSE_SOURCE)
{
@@ -328,7 +320,7 @@
ObDereferenceObject(ObjectBody);
- *TargetHandle = EX_HANDLE_TO_HANDLE(ExTargetHandle);
+ *TargetHandle = NewTargetHandle;
return STATUS_SUCCESS;
}
@@ -607,7 +599,7 @@
{
HANDLE_TABLE_ENTRY NewEntry;
POBJECT_HEADER ObjectHeader;
- LONG ExHandle;
+ HANDLE Handle;
PAGED_CODE();
@@ -639,10 +631,10 @@
NewEntry.u1.ObAttributes &= ~EX_HANDLE_ENTRY_INHERITABLE;
NewEntry.u2.GrantedAccess = GrantedAccess;
- ExHandle = ExCreateHandle(Process->ObjectTable,
- &NewEntry);
- DPRINT("ObCreateHandle(0x%x)==0x%x [HT:0x%x]\n", ObjectHeader,
*HandleReturn, Process->ObjectTable);
- if(ExHandle != EX_INVALID_HANDLE)
+ Handle = ExCreateHandle(Process->ObjectTable,
+ &NewEntry);
+ DPRINT("ObCreateHandle(0x%x)==0x%x [HT:0x%x]\n", ObjectHeader,
Handle, Process->ObjectTable);
+ if(Handle != NULL)
{
if(InterlockedIncrement(&ObjectHeader->HandleCount) == 1)
{
@@ -652,7 +644,7 @@
UserMode);
}
- *HandleReturn = EX_HANDLE_TO_HANDLE(ExHandle);
+ *HandleReturn = Handle;
return STATUS_SUCCESS;
}
@@ -670,7 +662,6 @@
{
PHANDLE_TABLE_ENTRY HandleEntry;
PEPROCESS Process;
- LONG ExHandle = HANDLE_TO_EX_HANDLE(Handle);
PAGED_CODE();
@@ -681,7 +672,7 @@
KeEnterCriticalRegion();
HandleEntry = ExMapHandleToPointer(Process->ObjectTable,
- ExHandle);
+ Handle);
if(HandleEntry != NULL)
{
*GenerateOnClose = (HandleEntry->u1.ObAttributes &
EX_HANDLE_ENTRY_AUDITONCLOSE) != 0;
@@ -729,7 +720,6 @@
PVOID ObjectBody;
ACCESS_MASK GrantedAccess;
ULONG Attributes;
- LONG ExHandle;
PAGED_CODE();
@@ -800,18 +790,17 @@
if(ObIsKernelHandle(Handle, AccessMode))
{
HandleTable = ObpKernelHandleTable;
- ExHandle = HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handle));
+ Handle = ObKernelHandleToHandle(Handle);
}
else
{
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handle);
}
KeEnterCriticalRegion();
HandleEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if (HandleEntry == NULL)
{
KeLeaveCriticalRegion();
_____
Modified: trunk/reactos/ntoskrnl/ob/wait.c
--- trunk/reactos/ntoskrnl/ob/wait.c 2005-08-07 23:37:59 UTC (rev
17190)
+++ trunk/reactos/ntoskrnl/ob/wait.c 2005-08-07 23:43:58 UTC (rev
17191)
@@ -38,7 +38,6 @@
POBJECT_HEADER ObjectHeader;
PHANDLE_TABLE HandleTable;
ACCESS_MASK GrantedAccess;
- LONG ExHandle;
PVOID DefaultObject;
NTSTATUS Status = STATUS_SUCCESS;
@@ -120,17 +119,16 @@
{
/* Use the System Handle Table and decode */
HandleTable = ObpKernelHandleTable;
- ExHandle =
HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handles[i]));
+ Handles[i] = ObKernelHandleToHandle(Handles[i]);
}
else
{
/* Use the Process' Handle table and get the Ex Handle */
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handles[i]);
}
/* Get a pointer to it */
- if (!(HandleEntry = ExMapHandleToPointer(HandleTable,
ExHandle)))
+ if (!(HandleEntry = ExMapHandleToPointer(HandleTable,
Handles[i])))
{
DPRINT1("Invalid handle\n");
Status = STATUS_INVALID_HANDLE;
_____
Modified: trunk/reactos/ntoskrnl/ps/process.c
--- trunk/reactos/ntoskrnl/ps/process.c 2005-08-07 23:37:59 UTC (rev
17190)
+++ trunk/reactos/ntoskrnl/ps/process.c 2005-08-07 23:43:58 UTC (rev
17191)
@@ -480,7 +480,7 @@
/* Get the CID Handle Entry */
if (!(CidEntry = ExMapHandleToPointer(PspCidTable,
-
HANDLE_TO_EX_HANDLE(ProcessId))))
+ ProcessId)))
{
/* Get the Process */
FoundProcess = CidEntry->u1.Object;
@@ -518,7 +518,7 @@
/* Get the CID Handle Entry */
if (!(CidEntry = ExMapHandleToPointer(PspCidTable,
-
HANDLE_TO_EX_HANDLE(Cid->UniqueThread))))
+ Cid->UniqueThread)))
{
/* Get the Process */
FoundThread = CidEntry->u1.Object;
_____
Modified: trunk/reactos/ntoskrnl/ps/thread.c
--- trunk/reactos/ntoskrnl/ps/thread.c 2005-08-07 23:37:59 UTC (rev
17190)
+++ trunk/reactos/ntoskrnl/ps/thread.c 2005-08-07 23:43:58 UTC (rev
17191)
@@ -377,7 +377,7 @@
/* Get the CID Handle Entry */
if (!(CidEntry = ExMapHandleToPointer(PspCidTable,
-
HANDLE_TO_EX_HANDLE(ThreadId))))
+ ThreadId)))
{
/* Get the Process */
FoundThread = CidEntry->u1.Object;
@@ -717,7 +717,6 @@
if (ClientId->UniqueProcess)
{
/* Get the Process */
- if (ClientId->UniqueProcess == (HANDLE)-1) KEBUGCHECK(0);
DPRINT("Opening by Process ID: %x\n",
ClientId->UniqueProcess);
Status = PsLookupProcessThreadByCid(ClientId,
NULL,
_____
Modified: trunk/reactos/ntoskrnl/rtl/libsupp.c
--- trunk/reactos/ntoskrnl/rtl/libsupp.c 2005-08-07 23:37:59 UTC
(rev 17190)
+++ trunk/reactos/ntoskrnl/rtl/libsupp.c 2005-08-07 23:43:58 UTC
(rev 17191)
@@ -246,33 +246,35 @@
RtlpFreeAtomHandle(PRTL_ATOM_TABLE AtomTable, PRTL_ATOM_TABLE_ENTRY
Entry)
{
ExDestroyHandle(AtomTable->ExHandleTable,
- (LONG)Entry->HandleIndex);
+ (HANDLE)((ULONG_PTR)Entry->HandleIndex << 2));
}
BOOLEAN
RtlpCreateAtomHandle(PRTL_ATOM_TABLE AtomTable, PRTL_ATOM_TABLE_ENTRY
Entry)
{
HANDLE_TABLE_ENTRY ExEntry;
- LONG HandleIndex;
+ HANDLE Handle;
+ USHORT HandleIndex;
ExEntry.u1.Object = Entry;
ExEntry.u2.GrantedAccess = 0x1; /* FIXME - valid handle */
- HandleIndex = ExCreateHandle(AtomTable->ExHandleTable,
+ Handle = ExCreateHandle(AtomTable->ExHandleTable,
&ExEntry);
- if (HandleIndex != EX_INVALID_HANDLE)
+ HandleIndex = (USHORT)((ULONG_PTR)Handle >> 2);
+ if (Handle != NULL)
{
/* FIXME - Handle Indexes >= 0xC000 ?! */
if (HandleIndex < 0xC000)
{
- Entry->HandleIndex = (USHORT)HandleIndex;
- Entry->Atom = 0xC000 + (USHORT)HandleIndex;
+ Entry->HandleIndex = HandleIndex;
+ Entry->Atom = 0xC000 + HandleIndex;
return TRUE;
}
else
ExDestroyHandle(AtomTable->ExHandleTable,
- HandleIndex);
+ Handle);
}
return FALSE;
@@ -284,7 +286,7 @@
PHANDLE_TABLE_ENTRY ExEntry;
ExEntry = ExMapHandleToPointer(AtomTable->ExHandleTable,
- (LONG)Index);
+ (HANDLE)((ULONG_PTR)Index << 2));
if (ExEntry != NULL)
{
PRTL_ATOM_TABLE_ENTRY Entry;