- Moved the deleting of the process id from PiTerminateProcess to
PiDeleteProcessWorker.
- Checked the status at the end of NtOpenProcessTokenEx.
Modified: trunk/reactos/ntoskrnl/ps/kill.c
Modified: trunk/reactos/ntoskrnl/ps/process.c
_____
Modified: trunk/reactos/ntoskrnl/ps/kill.c
--- trunk/reactos/ntoskrnl/ps/kill.c 2005-03-17 16:09:12 UTC (rev
14161)
+++ trunk/reactos/ntoskrnl/ps/kill.c 2005-03-17 18:51:20 UTC (rev
14162)
@@ -329,11 +329,6 @@
}
ObDeleteHandleTable(Process);
- if(Process->UniqueProcessId != NULL)
- {
- PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType);
- }
-
if (Process != CurrentProcess)
{
KeDetachProcess();
_____
Modified: trunk/reactos/ntoskrnl/ps/process.c
--- trunk/reactos/ntoskrnl/ps/process.c 2005-03-17 16:09:12 UTC (rev
14161)
+++ trunk/reactos/ntoskrnl/ps/process.c 2005-03-17 18:51:20 UTC (rev
14162)
@@ -243,15 +243,23 @@
&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 @@
KeDetachProcess();
}
+ if(Process->UniqueProcessId != NULL)
+ {
+ PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType);
+ }
+
MmReleaseMmInfo(Process);
if (Context->IsWorkerQueue)
{
@@ -1371,7 +1384,6 @@
DPRINT("NtOpenProcess() = STATUS_UNSUCCESSFUL\n");
return(STATUS_UNSUCCESSFUL);
}
- return(STATUS_UNSUCCESSFUL);
}