Move removing process from active list to PspDeleteProcess instead of
PspExitProcess. This way we don't have to do it manually after
ObInsertObject failure in PspCreateProces. Also, set the Process Query
Time at the end of Process Creation, since the process doesn't really
exist before then. Thanks to Hartmut for finding the bus.
Modified: trunk/reactos/ntoskrnl/ps/process.c
_____
Modified: trunk/reactos/ntoskrnl/ps/process.c
--- trunk/reactos/ntoskrnl/ps/process.c 2005-04-23 16:09:06 UTC (rev
14776)
+++ trunk/reactos/ntoskrnl/ps/process.c 2005-04-23 16:16:59 UTC (rev
14777)
@@ -287,8 +287,6 @@
/* Clean up the Object */
DPRINT("Cleaning Process Object\n");
RtlZeroMemory(Process, sizeof(EPROCESS));
-
- KeQuerySystemTime(&Process->CreateTime);
/* Inherit stuff from the Parent since we now have the object
created */
if (pParentProcess)
@@ -411,13 +409,13 @@
if (!NT_SUCCESS(Status))
{
DPRINT1("Could not get a handle to the Process Object\n");
- ExAcquireFastMutex(&PspActiveProcessMutex);
- RemoveEntryList(&Process->ProcessListEntry);
- ExReleaseFastMutex(&PspActiveProcessMutex);
ObDereferenceObject(Process);
goto exitdereferenceobjects;
}
+ /* Set the Creation Time */
+ KeQuerySystemTime(&Process->CreateTime);
+
DPRINT("Done. Returning handle: %x\n", hProcess);
_SEH_TRY
{
Show replies by date