- Initialized the process create time.
- Fixed some minor bugs.
Modified: trunk/reactos/ntoskrnl/ps/process.c
_____
Modified: trunk/reactos/ntoskrnl/ps/process.c
--- trunk/reactos/ntoskrnl/ps/process.c 2005-04-23 10:16:18 UTC (rev
14766)
+++ trunk/reactos/ntoskrnl/ps/process.c 2005-04-23 10:18:43 UTC (rev
14767)
@@ -287,6 +287,8 @@
/* 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)
@@ -387,6 +389,7 @@
/* Let's take advantage of this time to kill the reference too
*/
ObDereferenceObject(pParentProcess);
+ pParentProcess = NULL;
}
/* W00T! The process can now be activated */
@@ -407,23 +410,23 @@
&hProcess);
if (!NT_SUCCESS(Status))
{
- DPRINT1("Could not get a handle to the Process Object\n");
- ObDereferenceObject(Process);
- goto exitdereferenceobjects;
+ DPRINT1("Could not get a handle to the Process Object\n");
+ ExAcquireFastMutex(&PspActiveProcessMutex);
+ RemoveEntryList(&Process->ProcessListEntry);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
+ ObDereferenceObject(Process);
+ goto exitdereferenceobjects;
}
-
+
DPRINT("Done. Returning handle: %x\n", hProcess);
- if (NT_SUCCESS(Status))
+ _SEH_TRY
{
- _SEH_TRY
- {
- *ProcessHandle = hProcess;
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- } _SEH_END;
- }
+ *ProcessHandle = hProcess;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ } _SEH_END;
/* FIXME: ObGetObjectSecurity(Process, &SecurityDescriptor)
SeAccessCheck
Removed a wrong additional reference in IoCreateDevice.
Modified: trunk/reactos/ntoskrnl/io/device.c
_____
Modified: trunk/reactos/ntoskrnl/io/device.c
--- trunk/reactos/ntoskrnl/io/device.c 2005-04-23 10:15:49 UTC (rev
14765)
+++ trunk/reactos/ntoskrnl/io/device.c 2005-04-23 10:16:18 UTC (rev
14766)
@@ -511,8 +511,6 @@
CreatedDeviceObject->NextDevice = DriverObject->DeviceObject;
DriverObject->DeviceObject = CreatedDeviceObject;
- /* Close the temporary handle, but do an extra reference first so
it doesn't die */
- ObReferenceObject(CreatedDeviceObject);
NtClose(TempHandle);
/* Return to caller */