extern ARC_DISK_SIGNATURE reactos_arc_disk_info[];
extern char reactos_arc_strings[32][256];
+extern BOOLEAN UseRealHeap;
+extern ULONG LoaderPagesSpanned;
+
BOOLEAN
WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock,
IN PCH DllName,
}
RtlZeroMemory(Extension, sizeof(LOADER_PARAMETER_EXTENSION));
- /* Save size and version information */
+ /* Fill LPB extension */
Extension->Size = sizeof(LOADER_PARAMETER_EXTENSION);
Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
Extension->MinorVersion = VersionToBoot & 0xFF;
-
+ Extension->Profile.Status = 2;
LoaderBlock->Extension = PaToVa(Extension);
}
ULONG_PTR Tss = 0;
ULONG BlockSize, NumPages;
- LoaderBlock->u.I386.CommonDataArea = NULL;//CommonDataArea;
- //LoaderBlock->u.I386.MachineType = MachineType; //FIXME: MachineType?
+ LoaderBlock->u.I386.CommonDataArea = NULL; //CommonDataArea;
+ LoaderBlock->u.I386.MachineType = 0; // ntldr sets this to 0
/* Allocate 2 pages for PCR */
Pcr = (ULONG_PTR)MmAllocateMemoryWithType(2 * MM_PAGE_SIZE, LoaderStartupPcrPage);
PVOID DriverBase;
// Separate the path to file name and directory path
- sprintf(DriverPath, "%wZ", FilePath);
+ sprintf(DriverPath, "%S", FilePath->Buffer);
DriverNamePos = strrchr(DriverPath, '\\');
if (DriverNamePos != NULL)
{
}
// It's not loaded, we have to load it
- sprintf(FullPath,"%s%wZ", BootPath, FilePath);
+ sprintf(FullPath,"%s%S", BootPath, FilePath->Buffer);
Status = WinLdrLoadImage(FullPath, LoaderBootDriver, &DriverBase);
if (!Status)
return FALSE;
AllocateAndInitLPB(&LoaderBlock);
/* Detect hardware */
-#if WHEN_MERGE_COMPLETE
- MachHwDetect(&LoaderBlock->ConfigurationRoot);
-#else
- MachHwDetect();
-#endif
+ UseRealHeap = TRUE;
+ LoaderBlock->ConfigurationRoot = MachHwDetect();
/* Load kernel */
strcpy(FileName, BootPath);
/* Allocate data table entries for above-loaded modules */
WinLdrAllocateDataTableEntry(LoaderBlock, "ntoskrnl.exe",
- "WINNT\\SYSTEM32\\NTOSKRNL.EXE", NtosBase, &KernelDTE);
+ "WINDOWS\\SYSTEM32\\NTOSKRNL.EXE", NtosBase, &KernelDTE);
WinLdrAllocateDataTableEntry(LoaderBlock, "hal.dll",
- "WINNT\\SYSTEM32\\HAL.DLL", HalBase, &HalDTE);
+ "WINDOWS\\SYSTEM32\\HAL.DLL", HalBase, &HalDTE);
if (OperatingSystemVersion > _WIN32_WINNT_WIN2K)
{
WinLdrAllocateDataTableEntry(LoaderBlock, "kdcom.dll",
- "WINNT\\SYSTEM32\\KDCOM.DLL", KdComBase, &KdComDTE);
+ "WINDOWS\\SYSTEM32\\KDCOM.DLL", KdComBase, &KdComDTE);
}
/* Load all referenced DLLs for kernel, HAL and kdcom.dll */
Status = WinLdrLoadBootDrivers(LoaderBlock, BootPath);
DbgPrint((DPRINT_WINDOWS, "Boot drivers loaded with status %d\n", Status));
- /* Initialize Phase 1 - no drivers loading anymore */
- WinLdrInitializePhase1(LoaderBlock, BootOptions, SystemPath, OperatingSystemVersion);
-
/* Alloc PCR, TSS, do magic things with the GDT/IDT */
WinLdrSetupForNt(LoaderBlock, &GdtIdt, &PcrBasePage, &TssBasePage);
+ /* Initialize Phase 1 - no drivers loading anymore */
+ WinLdrInitializePhase1(LoaderBlock, BootOptions, SystemPath, OperatingSystemVersion);
+
/* Save entry-point pointer and Loader block VAs */
KiSystemStartup = (KERNEL_ENTRY_POINT)KernelDTE->EntryPoint;
LoaderBlockVA = PaToVa(LoaderBlock);
/* "Stop all motors", change videomode */
- DiskStopFloppyMotor();
- MachVideoPrepareForReactOS(FALSE);
+ if (OperatingSystemVersion < _WIN32_WINNT_WIN2K)
+ MachPrepareForReactOS(TRUE);
+ else
+ MachPrepareForReactOS(FALSE);
/* Debugging... */
//DumpMemoryAllocMap();
/* Turn on paging mode of CPU*/
WinLdrTurnOnPaging(LoaderBlock, PcrBasePage, TssBasePage, GdtIdt);
+ /* Save final value of LoaderPagesSpanned */
+ LoaderBlock->Extension->LoaderPagesSpanned = LoaderPagesSpanned;
+
DbgPrint((DPRINT_WINDOWS, "Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n",
KiSystemStartup, LoaderBlockVA));
}
}
+