From 100f53e3abbb547511957ba5a1e85547265e1e2b Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Thu, 17 Mar 2005 18:51:20 +0000 Subject: [PATCH] - Moved the deleting of the process id from PiTerminateProcess to PiDeleteProcessWorker. - Checked the status at the end of NtOpenProcessTokenEx. svn path=/trunk/; revision=14162 --- reactos/ntoskrnl/ps/kill.c | 5 ----- reactos/ntoskrnl/ps/process.c | 28 ++++++++++++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 9383f7cc5a9..ea167976184 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -329,11 +329,6 @@ PiTerminateProcess(PEPROCESS Process, } ObDeleteHandleTable(Process); - if(Process->UniqueProcessId != NULL) - { - PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType); - } - if (Process != CurrentProcess) { KeDetachProcess(); diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index 7df81dae643..efd8f0aa119 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -243,15 +243,23 @@ NtOpenProcessTokenEx( &hToken); ObDereferenceObject(Token); - _SEH_TRY + if (NT_SUCCESS(Status)) { - *TokenHandle = hToken; + + _SEH_TRY + { + *TokenHandle = hToken; + } + _SEH_HANDLE + { + Status = _SEH_GetExceptionCode(); + } + _SEH_END; + if (!NT_SUCCESS(Status)) + { + NtClose(hToken); + } } - _SEH_HANDLE - { - Status = _SEH_GetExceptionCode(); - } - _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); }