extern LIST_ENTRY KiProfileSourceListHead;
extern KSPIN_LOCK KiProfileLock;
BOOLEAN SetupMode = TRUE;
+BOOLEAN NoGuiBoot = FALSE;
VOID PspPostInitSystemProcess(VOID);
+static VOID INIT_FUNCTION InitSystemSharedUserPage (PCSZ ParameterLine);
+VOID INIT_FUNCTION ExpDisplayNotice(VOID);
+INIT_FUNCTION NTSTATUS ExpLoadInitialProcess(PHANDLE ProcessHandle, PHANDLE ThreadHandle);
+
+#if defined (ALLOC_PRAGMA)
+#pragma alloc_text(INIT, InitSystemSharedUserPage)
+#pragma alloc_text(INIT, ExpDisplayNotice)
+#pragma alloc_text(INIT, ExpLoadInitialProcess)
+#pragma alloc_text(INIT, ExpInitializeExecutive)
+#pragma alloc_text(INIT, ExInit2)
+#endif
+
/* FUNCTIONS ****************************************************************/
static
/* Create local parameter line copy */
ParamBuffer = ExAllocatePool(PagedPool, 256);
- strcpy (ParamBuffer, (char *)ParameterLine);
+ strcpy (ParamBuffer, (const char *)ParameterLine);
DPRINT("%s\n", ParamBuffer);
/* Cut options off */
}
}
-inline
+__inline
VOID
STDCALL
ExecuteRuntimeAsserts(VOID)
* Fail at runtime if someone has changed various structures without
* updating the offsets used for the assembler code.
*/
+ ASSERT(FIELD_OFFSET(KUSER_SHARED_DATA, SystemCall) == 0x300);
ASSERT(FIELD_OFFSET(KTHREAD, InitialStack) == KTHREAD_INITIAL_STACK);
ASSERT(FIELD_OFFSET(KTHREAD, Teb) == KTHREAD_TEB);
ASSERT(FIELD_OFFSET(KTHREAD, KernelStack) == KTHREAD_KERNEL_STACK);
ASSERT(FIELD_OFFSET(KPROCESS, DirectoryTableBase) == KPROCESS_DIRECTORY_TABLE_BASE);
ASSERT(FIELD_OFFSET(KPROCESS, IopmOffset) == KPROCESS_IOPM_OFFSET);
ASSERT(FIELD_OFFSET(KPROCESS, LdtDescriptor) == KPROCESS_LDT_DESCRIPTOR0);
- ASSERT(FIELD_OFFSET(KTRAP_FRAME, Reserved9) == KTRAP_FRAME_RESERVED9);
ASSERT(FIELD_OFFSET(KV86M_TRAP_FRAME, SavedExceptionStack) == TF_SAVED_EXCEPTION_STACK);
ASSERT(FIELD_OFFSET(KV86M_TRAP_FRAME, regs) == TF_REGS);
ASSERT(FIELD_OFFSET(KV86M_TRAP_FRAME, orig_ebp) == TF_ORIG_EBP);
ASSERT(FIELD_OFFSET(KIPCR, PrcbData) + FIELD_OFFSET(KPRCB, CurrentThread) == KPCR_CURRENT_THREAD);
ASSERT(FIELD_OFFSET(KIPCR, PrcbData) + FIELD_OFFSET(KPRCB, NpxThread) == KPCR_NPX_THREAD);
ASSERT(FIELD_OFFSET(KTSS, Esp0) == KTSS_ESP0);
- ASSERT(FIELD_OFFSET(KTSS, Eflags) == KTSS_EFLAGS);
ASSERT(FIELD_OFFSET(KTSS, IoMapBase) == KTSS_IOMAPBASE);
ASSERT(sizeof(FX_SAVE_AREA) == SIZEOF_FX_SAVE_AREA);
}
-inline
+__inline
VOID
STDCALL
ParseAndCacheLoadedModules(VOID)
}
}
-inline
+__inline
VOID
STDCALL
ParseCommandLine(PULONG MaxMem,
RTL_USER_PROCESS_INFORMATION Info;
/* Create a handle to the process */
- Status = ObpCreateHandle(PsGetCurrentProcess(),
- PsInitialSystemProcess,
+ Status = ObpCreateHandle(PsInitialSystemProcess,
PROCESS_CREATE_PROCESS | PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION,
- FALSE,
+ OBJ_KERNEL_HANDLE,
&SystemProcessHandle);
if(!NT_SUCCESS(Status))
{
UNICODE_STRING EventName;
HANDLE InitDoneEventHandle;
OBJECT_ATTRIBUTES ObjectAttributes;
- BOOLEAN NoGuiBoot = FALSE;
BOOLEAN BootLog = FALSE;
ULONG MaxMem = 0;
BOOLEAN ForceAcpiDisable = FALSE;
/* Parse the Loaded Modules (by FreeLoader) and cache the ones we'll need */
ParseAndCacheLoadedModules();
-
/* Initialize the Dispatcher, Clock and Bug Check Mechanisms. */
KeInit2();
/* Report all resources used by hal */
HalReportResourceUsage();
-
+
/* Clear the screen to blue */
HalInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
/* Display version number and copyright/warranty message */
- ExpDisplayNotice();
+ if (NoGuiBoot) ExpDisplayNotice();
/* Call KD Providers at Phase 2 */
KdInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
ExpInitTimeZoneInfo();
/* Enter the kernel debugger before starting up the boot drivers */
- if (KdDebuggerEnabled) KdbEnter();
+ if (KdDebuggerEnabled && KdpEarlyBreak)
+ DbgBreakPoint();
/* Setup Drivers and Root Device Node */
IoInit2(BootLog);
KEBUGCHECKEX(SESSION5_INITIALIZATION_FAILED, Status, 0, 0, 0);
}
- /* Disable the Boot Logo */
+ /*
+ * FIXME: FILIP!
+ * Disable the Boot Logo
+ */
if (!NoGuiBoot) InbvEnableBootDriver(FALSE);
/* Signal the Event and close the handle */