if (Parent != PsInitialSystemProcess)
{
/* It's not, so acquire the process rundown */
- if (ExAcquireRundownProtection(&Process->RundownProtect))
+ if (ExAcquireRundownProtection(&Parent->RundownProtect))
{
/* If the parent has a section, use it */
SectionObject = Parent->SectionObject;
if (SectionObject) ObReferenceObject(SectionObject);
/* Release process rundown */
- ExReleaseRundownProtection(&Process->RundownProtect);
+ ExReleaseRundownProtection(&Parent->RundownProtect);
}
/* If we don't have a section object */
}
}
+#if MI_TRACE_PFNS
+ /* Copy the process name now that we have it */
+ memcpy(MiGetPfnEntry(Process->Pcb.DirectoryTableBase[0] >> PAGE_SHIFT)->ProcessName, Process->ImageFileName, 16);
+ if (Process->Pcb.DirectoryTableBase[1]) memcpy(MiGetPfnEntry(Process->Pcb.DirectoryTableBase[1] >> PAGE_SHIFT)->ProcessName, Process->ImageFileName, 16);
+ if (Process->WorkingSetPage) memcpy(MiGetPfnEntry(Process->WorkingSetPage)->ProcessName, Process->ImageFileName, 16);
+#endif
+
/* Check if we have a section object and map the system DLL */
if (SectionObject) PspMapSystemDll(Process, NULL, FALSE);
/* Run the Notification Routines */
PspRunCreateProcessNotifyRoutines(Process, TRUE);
+
+ /* If 12 processes have been created, enough of user-mode is ready */
+ if (++ProcessCount == 12) Ki386PerfEnd();
CleanupWithRef:
/*