- Return correct error. Spotted by Thomas.
[reactos.git] / reactos / ntoskrnl / ps / cid.c
index eece7f4..935ca8f 100644 (file)
@@ -18,8 +18,6 @@
 
 PHANDLE_TABLE PspCidTable = NULL;
 
-#define TAG_CIDOBJECT TAG('C', 'I', 'D', 'O')
-
 #define CID_FLAG_PROCESS 0x1
 #define CID_FLAG_THREAD 0x2
 #define CID_FLAGS_MASK (CID_FLAG_PROCESS | CID_FLAG_THREAD)
@@ -38,9 +36,9 @@ PsCreateCidHandle(PVOID Object, POBJECT_TYPE ObjectType, PHANDLE Handle)
 {
   HANDLE_TABLE_ENTRY NewEntry;
   LONG ExHandle;
-  
+
   PAGED_CODE();
-  
+
   NewEntry.u1.Object = Object;
   if(ObjectType == PsThreadType)
     NewEntry.u2.GrantedAccess = CID_FLAG_THREAD;
@@ -48,10 +46,10 @@ PsCreateCidHandle(PVOID Object, POBJECT_TYPE ObjectType, PHANDLE Handle)
     NewEntry.u2.GrantedAccess = CID_FLAG_PROCESS;
   else
   {
-    DPRINT1("Can't create CID handles for %wZ objects\n", &ObjectType->TypeName);
+    DPRINT1("Can't create CID handles for %wZ objects\n", &ObjectType->Name);
     KEBUGCHECK(0);
   }
-  
+
   ExHandle = ExCreateHandle(PspCidTable,
                             &NewEntry);
   if(ExHandle != EX_INVALID_HANDLE)
@@ -59,7 +57,7 @@ PsCreateCidHandle(PVOID Object, POBJECT_TYPE ObjectType, PHANDLE Handle)
     *Handle = EX_HANDLE_TO_HANDLE(ExHandle);
     return STATUS_SUCCESS;
   }
-  
+
   return STATUS_UNSUCCESSFUL;
 }
 
@@ -68,9 +66,11 @@ PsDeleteCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType)
 {
   PHANDLE_TABLE_ENTRY Entry;
   LONG ExHandle = HANDLE_TO_EX_HANDLE(CidHandle);
-  
+
   PAGED_CODE();
 
+  KeEnterCriticalRegion();
+
   Entry = ExMapHandleToPointer(PspCidTable,
                                ExHandle);
   if(Entry != NULL)
@@ -81,16 +81,18 @@ PsDeleteCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType)
       ExDestroyHandleByEntry(PspCidTable,
                              Entry,
                              ExHandle);
+      KeLeaveCriticalRegion();
       return STATUS_SUCCESS;
     }
     else
     {
       ExUnlockHandleTableEntry(PspCidTable,
                                Entry);
+      KeLeaveCriticalRegion();
       return STATUS_OBJECT_TYPE_MISMATCH;
     }
   }
-
+  KeLeaveCriticalRegion();
   return STATUS_INVALID_HANDLE;
 }
 
@@ -98,11 +100,11 @@ PHANDLE_TABLE_ENTRY
 PsLookupCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType, PVOID *Object)
 {
   PHANDLE_TABLE_ENTRY Entry;
-  
+
   PAGED_CODE();
 
   KeEnterCriticalRegion();
-  
+
   Entry = ExMapHandleToPointer(PspCidTable,
                                HANDLE_TO_EX_HANDLE(CidHandle));
   if(Entry != NULL)
@@ -116,14 +118,14 @@ PsLookupCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType, PVOID *Object)
     else
     {
       DPRINT1("CID Obj type mismatch handle 0x%x %wZ vs 0x%x\n", CidHandle,
-              &ObjectType->TypeName, Entry->u2.GrantedAccess);
+              &ObjectType->Name, Entry->u2.GrantedAccess);
       ExUnlockHandleTableEntry(PspCidTable,
                                Entry);
     }
   }
-  
+
   KeLeaveCriticalRegion();
-  
+
   return NULL;
 }
 
@@ -137,6 +139,7 @@ PsLookupProcessThreadByCid(IN PCLIENT_ID Cid,
 {
   PHANDLE_TABLE_ENTRY CidEntry;
   PETHREAD FoundThread;
+  NTSTATUS Status = STATUS_INVALID_CID;
 
   PAGED_CODE();
 
@@ -155,10 +158,10 @@ PsLookupProcessThreadByCid(IN PCLIENT_ID Cid,
       *Process = FoundThread->ThreadsProcess;
     }
     *Thread = FoundThread;
-    return STATUS_SUCCESS;
+    Status = STATUS_SUCCESS;
   }
 
-  return STATUS_INVALID_PARAMETER;
+  return Status;
 }
 
 
@@ -171,6 +174,7 @@ PsLookupThreadByThreadId(IN HANDLE ThreadId,
 {
   PHANDLE_TABLE_ENTRY CidEntry;
   PETHREAD FoundThread;
+  NTSTATUS Status = STATUS_INVALID_CID;
 
   PAGED_CODE();
 
@@ -184,10 +188,10 @@ PsLookupThreadByThreadId(IN HANDLE ThreadId,
     PsUnlockCidHandle(CidEntry);
 
     *Thread = FoundThread;
-    return STATUS_SUCCESS;
+    Status = STATUS_SUCCESS;
   }
 
-  return STATUS_INVALID_PARAMETER;
+  return Status;
 }
 
 VOID