- Moved the deleting of the process id from PiTerminateProcess to PiDeleteProcessWorker.
authorHartmut Birr <osexpert@googlemail.com>
Thu, 17 Mar 2005 18:51:20 +0000 (18:51 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Thu, 17 Mar 2005 18:51:20 +0000 (18:51 +0000)
- Checked the status at the end of NtOpenProcessTokenEx.

svn path=/trunk/; revision=14162

reactos/ntoskrnl/ps/kill.c
reactos/ntoskrnl/ps/process.c

index 9383f7c..ea16797 100644 (file)
@@ -329,11 +329,6 @@ PiTerminateProcess(PEPROCESS Process,
    }
 
    ObDeleteHandleTable(Process);
-   if(Process->UniqueProcessId != NULL)
-   {
-     PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType);
-   }
-
    if (Process != CurrentProcess)
    {
       KeDetachProcess();
index 7df81da..efd8f0a 100644 (file)
@@ -243,15 +243,23 @@ NtOpenProcessTokenEx(
                             &hToken);
      ObDereferenceObject(Token);
 
-     _SEH_TRY
-     {
-       *TokenHandle = hToken;
-     }
-     _SEH_HANDLE
+     if (NT_SUCCESS(Status))
      {
-       Status = _SEH_GetExceptionCode();
+
+       _SEH_TRY
+       {
+         *TokenHandle = hToken;
+       }
+       _SEH_HANDLE
+       {
+         Status = _SEH_GetExceptionCode();
+       }
+       _SEH_END;
+       if (!NT_SUCCESS(Status))
+       {
+         NtClose(hToken);
+       }
      }
-     _SEH_END;
    }
    
    return Status;
@@ -518,6 +526,11 @@ PiDeleteProcessWorker(PVOID pContext)
       KeDetachProcess();
     }
 
+  if(Process->UniqueProcessId != NULL)
+    {
+      PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType);
+    }
+
   MmReleaseMmInfo(Process);
   if (Context->IsWorkerQueue)
     {
@@ -1371,7 +1384,6 @@ NtOpenProcess(OUT PHANDLE     ProcessHandle,
        DPRINT("NtOpenProcess() = STATUS_UNSUCCESSFUL\n");
        return(STATUS_UNSUCCESSFUL);
      }
-   return(STATUS_UNSUCCESSFUL);
 }