Lock the handle table if we trying to get a pointer from a handle.
Modified: trunk/reactos/ntoskrnl/ex/handle.c

Modified: trunk/reactos/ntoskrnl/ex/handle.c
--- trunk/reactos/ntoskrnl/ex/handle.c	2005-07-26 19:38:33 UTC (rev 16757)
+++ trunk/reactos/ntoskrnl/ex/handle.c	2005-07-26 19:46:07 UTC (rev 16758)
@@ -910,14 +910,16 @@
 
   ASSERT(HandleTable);
 
+  ExAcquireHandleTableLockShared(HandleTable);
   HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
                                                Handle);
   if (HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
   {
     DPRINT("ExMapHandleToPointer HT:0x%p Entry:0x%p locked\n", HandleTable, HandleTableEntry);
+    ExReleaseHandleTableLock(HandleTable);
     return HandleTableEntry;
   }
-
+  ExReleaseHandleTableLock(HandleTable);
   return NULL;
 }
 
@@ -936,12 +938,14 @@
   ASSERT(ChangeHandleCallback);
 
   KeEnterCriticalRegion();
+  ExAcquireHandleTableLockShared(HandleTable);
 
   HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
                                                Handle);
 
   if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
   {
+    ExReleaseHandleTableLock(HandleTable);
     Ret = ChangeHandleCallback(HandleTable,
                                HandleTableEntry,
                                NULL);
@@ -949,7 +953,10 @@
     ExUnlockHandleTableEntry(HandleTable,
                              HandleTableEntry);
   }
-
+  else
+  {
+    ExReleaseHandleTableLock(HandleTable);
+  }
   KeLeaveCriticalRegion();
 
   return Ret;