[FREELDR] Some changes that accumulated since years in my local copy. Also initialize SetupBlock->ArcSetupDeviceName to some valid value.

This commit is contained in:
Hermès Bélusca-Maïto 2019-08-10 19:13:20 +02:00
parent c9a20ced91
commit 31a3f3177c
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
16 changed files with 146 additions and 129 deletions

View file

@ -80,5 +80,4 @@ int386_2:
pop rbx pop rbx
ret ret
END END

View file

@ -21,24 +21,24 @@
VOID VOID
MachInit(const char *CmdLine) MachInit(const char *CmdLine)
{ {
ULONG PciId; ULONG PciId;
memset(&MachVtbl, 0, sizeof(MACHVTBL)); memset(&MachVtbl, 0, sizeof(MACHVTBL));
/* Check for Xbox by identifying device at PCI 0:0:0, if it's /* Check for Xbox by identifying device at PCI 0:0:0, if it's
* 0x10de/0x02a5 then we're running on an Xbox */ * 0x10de/0x02a5 then we're running on an Xbox */
WRITE_PORT_ULONG((ULONG*) 0xcf8, CONFIG_CMD(0, 0, 0)); WRITE_PORT_ULONG((ULONG*)0xcf8, CONFIG_CMD(0, 0, 0));
PciId = READ_PORT_ULONG((ULONG*) 0xcfc); PciId = READ_PORT_ULONG((ULONG*)0xcfc);
if (0x02a510de == PciId) if (PciId == 0x02a510de)
{ {
XboxMachInit(CmdLine); XboxMachInit(CmdLine);
} }
else else
{ {
PcMachInit(CmdLine); PcMachInit(CmdLine);
} }
HalpCalibrateStallExecution(); HalpCalibrateStallExecution();
} }
/* EOF */ /* EOF */

View file

@ -27,30 +27,30 @@ DBG_DEFAULT_CHANNEL(HWDETECT);
static BOOLEAN static BOOLEAN
FindApmBios(VOID) FindApmBios(VOID)
{ {
REGS RegsIn; REGS RegsIn;
REGS RegsOut; REGS RegsOut;
RegsIn.b.ah = 0x53; RegsIn.b.ah = 0x53;
RegsIn.b.al = 0x00; RegsIn.b.al = 0x00;
RegsIn.w.bx = 0x0000; RegsIn.w.bx = 0x0000;
Int386(0x15, &RegsIn, &RegsOut); Int386(0x15, &RegsIn, &RegsOut);
if (INT386_SUCCESS(RegsOut)) if (INT386_SUCCESS(RegsOut))
{ {
TRACE("Found APM BIOS\n"); TRACE("Found APM BIOS\n");
TRACE("AH: %x\n", RegsOut.b.ah); TRACE("AH: %x\n", RegsOut.b.ah);
TRACE("AL: %x\n", RegsOut.b.al); TRACE("AL: %x\n", RegsOut.b.al);
TRACE("BH: %x\n", RegsOut.b.bh); TRACE("BH: %x\n", RegsOut.b.bh);
TRACE("BL: %x\n", RegsOut.b.bl); TRACE("BL: %x\n", RegsOut.b.bl);
TRACE("CX: %x\n", RegsOut.w.cx); TRACE("CX: %x\n", RegsOut.w.cx);
return TRUE; return TRUE;
} }
TRACE("No APM BIOS found\n"); TRACE("No APM BIOS found\n");
return FALSE; return FALSE;
} }

View file

@ -87,7 +87,7 @@ FindPciBios(PPCI_REGISTRY_INFO BusData)
Int386(0x1A, &RegsIn, &RegsOut); Int386(0x1A, &RegsIn, &RegsOut);
if (INT386_SUCCESS(RegsOut) && if (INT386_SUCCESS(RegsOut) &&
(RegsOut.d.edx == 0x20494350) && (RegsOut.d.edx == ' ICP') &&
(RegsOut.b.ah == 0)) (RegsOut.b.ah == 0))
{ {
TRACE("Found PCI bios\n"); TRACE("Found PCI bios\n");

View file

@ -23,7 +23,7 @@
#include "prep.h" #include "prep.h"
#include "compat.h" #include "compat.h"
extern void BootMain( LPSTR CmdLine ); extern void BootMain( PSTR CmdLine );
extern const PCSTR GetFreeLoaderVersionString(VOID); extern const PCSTR GetFreeLoaderVersionString(VOID);
extern ULONG CacheSizeLimit; extern ULONG CacheSizeLimit;
of_proxy ofproxy; of_proxy ofproxy;

View file

@ -432,10 +432,10 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern
Elf32_Ehdr ehdr; Elf32_Ehdr ehdr;
Elf32_Shdr *shdr; Elf32_Shdr *shdr;
LARGE_INTEGER Position; LARGE_INTEGER Position;
LPSTR TempName; PSTR TempName;
TempName = strrchr(ImageName, '\\'); TempName = strrchr(ImageName, '\\');
if(TempName) TempName++; else TempName = (LPSTR)ImageName; if(TempName) TempName++; else TempName = (PSTR)ImageName;
ModuleData = LdrGetModuleObject(TempName); ModuleData = LdrGetModuleObject(TempName);
if(ModuleData) if(ModuleData)
@ -708,7 +708,7 @@ FrLdrMapKernel(FILE *KernelImage)
ULONG_PTR ULONG_PTR
NTAPI NTAPI
FrLdrLoadModule(FILE *ModuleImage, FrLdrLoadModule(FILE *ModuleImage,
LPCSTR ModuleName, PCSTR ModuleName,
PULONG ModuleSize) PULONG ModuleSize)
{ {
ARC_STATUS Status; ARC_STATUS Status;
@ -716,8 +716,8 @@ FrLdrLoadModule(FILE *ModuleImage,
ULONG LocalModuleSize; ULONG LocalModuleSize;
ULONG_PTR ThisModuleBase = NextModuleBase; ULONG_PTR ThisModuleBase = NextModuleBase;
PLOADER_MODULE ModuleData; PLOADER_MODULE ModuleData;
LPSTR NameBuffer; PSTR NameBuffer;
LPSTR TempName; PSTR TempName;
/* Get current module data structure and module name string array */ /* Get current module data structure and module name string array */
ModuleData = &reactos_modules[LoaderBlock.ModsCount]; ModuleData = &reactos_modules[LoaderBlock.ModsCount];
@ -795,10 +795,10 @@ FrLdrMapImage(IN FILE *Image, IN PCHAR ShortName, IN ULONG ImageType)
ULONG_PTR ULONG_PTR
NTAPI NTAPI
FrLdrCreateModule(LPCSTR ModuleName) FrLdrCreateModule(PCSTR ModuleName)
{ {
PLOADER_MODULE ModuleData; PLOADER_MODULE ModuleData;
LPSTR NameBuffer; PSTR NameBuffer;
/* Get current module data structure and module name string array */ /* Get current module data structure and module name string array */
ModuleData = &reactos_modules[LoaderBlock.ModsCount]; ModuleData = &reactos_modules[LoaderBlock.ModsCount];

View file

@ -83,6 +83,3 @@ Int386_vector_opcode:
pop ds pop ds
ret ret

View file

@ -91,12 +91,9 @@ BOOLEAN CacheInitializeDrive(UCHAR DriveNumber)
CacheManagerDrive.BlockSize = MachDiskGetCacheableBlockCount(DriveNumber); CacheManagerDrive.BlockSize = MachDiskGetCacheableBlockCount(DriveNumber);
CacheBlockCount = 0; CacheBlockCount = 0;
CacheSizeLimit = TotalPagesInLookupTable / 8 * MM_PAGE_SIZE;
CacheSizeCurrent = 0; CacheSizeCurrent = 0;
if (CacheSizeLimit > TEMP_HEAP_SIZE - (128 * 1024)) CacheSizeLimit = TotalPagesInLookupTable / 8 * MM_PAGE_SIZE;
{ CacheSizeLimit = min(CacheSizeLimit, TEMP_HEAP_SIZE - (128 * 1024));
CacheSizeLimit = TEMP_HEAP_SIZE - (128 * 1024);
}
CacheManagerInitialized = TRUE; CacheManagerInitialized = TRUE;

View file

@ -165,8 +165,8 @@ WinLdrMapSpecialPages(ULONG PcrBasePage)
VOID VOID
WinLdrSetupForNt(IN PLOADER_PARAMETER_BLOCK LoaderBlock, WinLdrSetupForNt(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PVOID *GdtIdt, IN PVOID *GdtIdt,
IN ULONG *PcrBasePage, IN PULONG PcrBasePage,
IN ULONG *TssBasePage) IN PULONG TssBasePage)
{ {
PKPDR_PAGE PdrPage = (PVOID)0xFFD00000; PKPDR_PAGE PdrPage = (PVOID)0xFFD00000;

View file

@ -632,7 +632,7 @@ WinLdrSetProcessorContext(void)
VOID VOID
MempDump(VOID) MempDump(VOID)
{ {
ULONG *PDE_Addr=(ULONG *)PDE;//0xC0300000; PULONG PDE_Addr=(PULONG)PDE;//0xC0300000;
int i, j; int i, j;
TRACE("\nPDE\n"); TRACE("\nPDE\n");

View file

@ -225,7 +225,7 @@ RegEnumKey(
_In_ HKEY Key, _In_ HKEY Key,
_In_ ULONG Index, _In_ ULONG Index,
_Out_ PWCHAR Name, _Out_ PWCHAR Name,
_Inout_ ULONG* NameSize, _Inout_ PULONG NameSize,
_Out_opt_ PHKEY SubKey) _Out_opt_ PHKEY SubKey)
{ {
PHHIVE Hive = &CmHive->Hive; PHHIVE Hive = &CmHive->Hive;
@ -398,9 +398,9 @@ VOID
RepGetValueData( RepGetValueData(
_In_ PHHIVE Hive, _In_ PHHIVE Hive,
_In_ PCM_KEY_VALUE ValueCell, _In_ PCM_KEY_VALUE ValueCell,
_Out_opt_ ULONG* Type, _Out_opt_ PULONG Type,
_Out_opt_ PUCHAR Data, _Out_opt_ PUCHAR Data,
_Inout_opt_ ULONG* DataSize) _Inout_opt_ PULONG DataSize)
{ {
ULONG DataLength; ULONG DataLength;
PVOID DataCell; PVOID DataCell;
@ -435,9 +435,9 @@ LONG
RegQueryValue( RegQueryValue(
_In_ HKEY Key, _In_ HKEY Key,
_In_z_ PCWSTR ValueName, _In_z_ PCWSTR ValueName,
_Out_opt_ ULONG* Type, _Out_opt_ PULONG Type,
_Out_opt_ PUCHAR Data, _Out_opt_ PUCHAR Data,
_Inout_opt_ ULONG* DataSize) _Inout_opt_ PULONG DataSize)
{ {
PHHIVE Hive = &CmHive->Hive; PHHIVE Hive = &CmHive->Hive;
PCM_KEY_NODE KeyNode; PCM_KEY_NODE KeyNode;
@ -485,10 +485,10 @@ RegEnumValue(
_In_ HKEY Key, _In_ HKEY Key,
_In_ ULONG Index, _In_ ULONG Index,
_Out_ PWCHAR ValueName, _Out_ PWCHAR ValueName,
_Inout_ ULONG* NameSize, _Inout_ PULONG NameSize,
_Out_opt_ ULONG* Type, _Out_opt_ PULONG Type,
_Out_opt_ PUCHAR Data, _Out_opt_ PUCHAR Data,
_Inout_opt_ ULONG* DataSize) _Inout_opt_ PULONG DataSize)
{ {
PHHIVE Hive = &CmHive->Hive; PHHIVE Hive = &CmHive->Hive;
PCM_KEY_NODE KeyNode; PCM_KEY_NODE KeyNode;

View file

@ -23,41 +23,48 @@
typedef HANDLE HKEY, *PHKEY; typedef HANDLE HKEY, *PHKEY;
BOOLEAN
RegImportBinaryHive(
_In_ PVOID ChunkBase,
_In_ ULONG ChunkSize);
LONG LONG
RegInitCurrentControlSet(BOOLEAN LastKnownGood); RegInitCurrentControlSet(
_In_ BOOLEAN LastKnownGood);
LONG LONG
RegEnumKey( RegEnumKey(
_In_ HKEY Key, _In_ HKEY Key,
_In_ ULONG Index, _In_ ULONG Index,
_Out_ PWCHAR Name, _Out_ PWCHAR Name,
_Inout_ ULONG* NameSize, _Inout_ PULONG NameSize,
_Out_opt_ PHKEY SubKey); _Out_opt_ PHKEY SubKey);
LONG LONG
RegOpenKey(HKEY ParentKey, RegOpenKey(
PCWSTR KeyName, _In_ HKEY ParentKey,
PHKEY Key); _In_z_ PCWSTR KeyName,
_Out_ PHKEY Key);
LONG LONG
RegQueryValue(HKEY Key, RegQueryValue(
PCWSTR ValueName, _In_ HKEY Key,
ULONG* Type, _In_z_ PCWSTR ValueName,
PUCHAR Data, _Out_opt_ PULONG Type,
ULONG* DataSize); _Out_opt_ PUCHAR Data,
_Inout_opt_ PULONG DataSize);
#if 0
LONG LONG
RegEnumValue(HKEY Key, RegEnumValue(
ULONG Index, _In_ HKEY Key,
PWCHAR ValueName, _In_ ULONG Index,
ULONG* NameSize, _Out_ PWCHAR ValueName,
ULONG* Type, _Inout_ PULONG NameSize,
PUCHAR Data, _Out_opt_ PULONG Type,
ULONG* DataSize); _Out_opt_ PUCHAR Data,
_Inout_opt_ PULONG DataSize)
BOOLEAN #endif
RegImportBinaryHive(PVOID ChunkBase,
ULONG ChunkSize);
#endif /* __REGISTRY_H */ #endif /* __REGISTRY_H */

View file

@ -33,10 +33,10 @@ DBG_DEFAULT_CHANNEL(WINDOWS);
VOID AllocateAndInitLPB(PLOADER_PARAMETER_BLOCK *OutLoaderBlock); VOID AllocateAndInitLPB(PLOADER_PARAMETER_BLOCK *OutLoaderBlock);
static VOID static VOID
SetupLdrLoadNlsData(PLOADER_PARAMETER_BLOCK LoaderBlock, HINF InfHandle, LPCSTR SearchPath) SetupLdrLoadNlsData(PLOADER_PARAMETER_BLOCK LoaderBlock, HINF InfHandle, PCSTR SearchPath)
{ {
INFCONTEXT InfContext; INFCONTEXT InfContext;
LPCSTR AnsiName, OemName, LangName; PCSTR AnsiName, OemName, LangName;
/* Get ANSI codepage file */ /* Get ANSI codepage file */
if (!InfFindFirstLine(InfHandle, "NLS", "AnsiCodepage", &InfContext)) if (!InfFindFirstLine(InfHandle, "NLS", "AnsiCodepage", &InfContext))
@ -79,7 +79,7 @@ SetupLdrLoadNlsData(PLOADER_PARAMETER_BLOCK LoaderBlock, HINF InfHandle, LPCSTR
{ {
BOOLEAN Success = WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName); BOOLEAN Success = WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName);
TRACE("NLS data loading %s\n", Success ? "successful" : "failed"); TRACE("NLS data loading %s\n", Success ? "successful" : "failed");
} }
#else #else
WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName); WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName);
#endif #endif
@ -89,11 +89,11 @@ SetupLdrLoadNlsData(PLOADER_PARAMETER_BLOCK LoaderBlock, HINF InfHandle, LPCSTR
} }
static VOID static VOID
SetupLdrScanBootDrivers(PLIST_ENTRY BootDriverListHead, HINF InfHandle, LPCSTR SearchPath) SetupLdrScanBootDrivers(PLIST_ENTRY BootDriverListHead, HINF InfHandle, PCSTR SearchPath)
{ {
INFCONTEXT InfContext, dirContext; INFCONTEXT InfContext, dirContext;
BOOLEAN Success; BOOLEAN Success;
LPCSTR Media, DriverName, dirIndex, ImagePath; PCSTR Media, DriverName, dirIndex, ImagePath;
WCHAR ServiceName[256]; WCHAR ServiceName[256];
WCHAR ImagePathW[256]; WCHAR ImagePathW[256];
@ -152,8 +152,8 @@ LoadReactOSSetup(
CHAR FileName[512]; CHAR FileName[512];
CHAR BootPath[512]; CHAR BootPath[512];
CHAR BootOptions2[256]; CHAR BootOptions2[256];
LPCSTR LoadOptions; PCSTR LoadOptions;
LPSTR BootOptions; PSTR BootOptions;
BOOLEAN BootFromFloppy; BOOLEAN BootFromFloppy;
BOOLEAN Success; BOOLEAN Success;
ULONG i, ErrorLine; ULONG i, ErrorLine;
@ -161,9 +161,9 @@ LoadReactOSSetup(
INFCONTEXT InfContext; INFCONTEXT InfContext;
PLOADER_PARAMETER_BLOCK LoaderBlock; PLOADER_PARAMETER_BLOCK LoaderBlock;
PSETUP_LOADER_BLOCK SetupBlock; PSETUP_LOADER_BLOCK SetupBlock;
LPCSTR SystemPath; PCSTR SystemPath;
static LPCSTR SourcePaths[] = static PCSTR SourcePaths[] =
{ {
"", /* Only for floppy boot */ "", /* Only for floppy boot */
#if defined(_M_IX86) #if defined(_M_IX86)
@ -297,7 +297,7 @@ LoadReactOSSetup(
/* Get debug load options and use them */ /* Get debug load options and use them */
if (InfFindFirstLine(InfHandle, "SetupData", "DbgOsLoadOptions", &InfContext)) if (InfFindFirstLine(InfHandle, "SetupData", "DbgOsLoadOptions", &InfContext))
{ {
LPCSTR DbgLoadOptions; PCSTR DbgLoadOptions;
if (InfGetDataField(&InfContext, 1, &DbgLoadOptions)) if (InfGetDataField(&InfContext, 1, &DbgLoadOptions))
LoadOptions = DbgLoadOptions; LoadOptions = DbgLoadOptions;

View file

@ -75,9 +75,9 @@ AllocateAndInitLPB(PLOADER_PARAMETER_BLOCK *OutLoaderBlock)
// Init "phase 1" // Init "phase 1"
VOID VOID
WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
LPCSTR Options, PCSTR Options,
LPCSTR SystemRoot, PCSTR SystemRoot,
LPCSTR BootPath, PCSTR BootPath,
USHORT VersionToBoot) USHORT VersionToBoot)
{ {
/* Examples of correct options and paths */ /* Examples of correct options and paths */
@ -86,7 +86,7 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
//CHAR SystemRoot[] = "\\WINNT\\"; //CHAR SystemRoot[] = "\\WINNT\\";
//CHAR ArcBoot[] = "multi(0)disk(0)rdisk(0)partition(1)"; //CHAR ArcBoot[] = "multi(0)disk(0)rdisk(0)partition(1)";
LPSTR LoadOptions, NewLoadOptions; PSTR LoadOptions, NewLoadOptions;
CHAR HalPath[] = "\\"; CHAR HalPath[] = "\\";
CHAR ArcBoot[MAX_PATH+1]; CHAR ArcBoot[MAX_PATH+1];
CHAR MiscFiles[MAX_PATH+1]; CHAR MiscFiles[MAX_PATH+1];
@ -107,6 +107,23 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
RtlStringCbCopyA(LoaderBlock->ArcBootDeviceName, sizeof(WinLdrSystemBlock->ArcBootDeviceName), ArcBoot); RtlStringCbCopyA(LoaderBlock->ArcBootDeviceName, sizeof(WinLdrSystemBlock->ArcBootDeviceName), ArcBoot);
LoaderBlock->ArcBootDeviceName = PaToVa(LoaderBlock->ArcBootDeviceName); LoaderBlock->ArcBootDeviceName = PaToVa(LoaderBlock->ArcBootDeviceName);
//
// IMPROVE!!
// SetupBlock->ArcSetupDeviceName must be the path to the setup **SOURCE**,
// and not the setup boot path. Indeed they may differ!!
//
/* If we have a setup block, adjust also its ARC path */
if (LoaderBlock->SetupLdrBlock)
{
PSETUP_LOADER_BLOCK SetupBlock = LoaderBlock->SetupLdrBlock;
/* Matches ArcBoot path */
SetupBlock->ArcSetupDeviceName = WinLdrSystemBlock->ArcBootDeviceName;
SetupBlock->ArcSetupDeviceName = PaToVa(SetupBlock->ArcSetupDeviceName);
/* Note: LoaderBlock->SetupLdrBlock is PaToVa'ed at the end of this function */
}
/* Fill ARC HalDevice, it matches ArcBoot path */ /* Fill ARC HalDevice, it matches ArcBoot path */
LoaderBlock->ArcHalDeviceName = WinLdrSystemBlock->ArcBootDeviceName; LoaderBlock->ArcHalDeviceName = WinLdrSystemBlock->ArcBootDeviceName;
LoaderBlock->ArcHalDeviceName = PaToVa(LoaderBlock->ArcHalDeviceName); LoaderBlock->ArcHalDeviceName = PaToVa(LoaderBlock->ArcHalDeviceName);
@ -221,7 +238,7 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
static BOOLEAN static BOOLEAN
WinLdrLoadDeviceDriver(PLIST_ENTRY LoadOrderListHead, WinLdrLoadDeviceDriver(PLIST_ENTRY LoadOrderListHead,
LPCSTR BootPath, PCSTR BootPath,
PUNICODE_STRING FilePath, PUNICODE_STRING FilePath,
ULONG Flags, ULONG Flags,
PLDR_DATA_TABLE_ENTRY *DriverDTE) PLDR_DATA_TABLE_ENTRY *DriverDTE)
@ -292,7 +309,7 @@ WinLdrLoadDeviceDriver(PLIST_ENTRY LoadOrderListHead,
BOOLEAN BOOLEAN
WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock, WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock,
LPCSTR BootPath) PCSTR BootPath)
{ {
PLIST_ENTRY NextBd; PLIST_ENTRY NextBd;
PBOOT_DRIVER_LIST_ENTRY BootDriver; PBOOT_DRIVER_LIST_ENTRY BootDriver;
@ -344,7 +361,7 @@ WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock,
PVOID PVOID
WinLdrLoadModule(PCSTR ModuleName, WinLdrLoadModule(PCSTR ModuleName,
ULONG *Size, PULONG Size,
TYPE_OF_MEMORY MemoryType) TYPE_OF_MEMORY MemoryType)
{ {
ULONG FileId; ULONG FileId;
@ -782,15 +799,15 @@ ARC_STATUS
LoadAndBootWindowsCommon( LoadAndBootWindowsCommon(
USHORT OperatingSystemVersion, USHORT OperatingSystemVersion,
PLOADER_PARAMETER_BLOCK LoaderBlock, PLOADER_PARAMETER_BLOCK LoaderBlock,
LPCSTR BootOptions, PCSTR BootOptions,
LPCSTR BootPath, PCSTR BootPath,
BOOLEAN Setup) BOOLEAN Setup)
{ {
PLOADER_PARAMETER_BLOCK LoaderBlockVA; PLOADER_PARAMETER_BLOCK LoaderBlockVA;
BOOLEAN Success; BOOLEAN Success;
PLDR_DATA_TABLE_ENTRY KernelDTE; PLDR_DATA_TABLE_ENTRY KernelDTE;
KERNEL_ENTRY_POINT KiSystemStartup; KERNEL_ENTRY_POINT KiSystemStartup;
LPCSTR SystemRoot; PCSTR SystemRoot;
TRACE("LoadAndBootWindowsCommon()\n"); TRACE("LoadAndBootWindowsCommon()\n");

View file

@ -97,7 +97,7 @@ VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start);
// winldr.c // winldr.c
PVOID WinLdrLoadModule(PCSTR ModuleName, ULONG *Size, PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size,
TYPE_OF_MEMORY MemoryType); TYPE_OF_MEMORY MemoryType);
// wlmemory.c // wlmemory.c
@ -112,21 +112,21 @@ WinLdrInitSystemHive(
IN BOOLEAN Setup); IN BOOLEAN Setup);
BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
IN LPCSTR DirectoryPath); IN PCSTR DirectoryPath);
// winldr.c // winldr.c
VOID VOID
WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
LPCSTR Options, PCSTR Options,
LPCSTR SystemPath, PCSTR SystemPath,
LPCSTR BootPath, PCSTR BootPath,
USHORT VersionToBoot); USHORT VersionToBoot);
BOOLEAN BOOLEAN
WinLdrLoadNLSData(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, WinLdrLoadNLSData(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
IN LPCSTR DirectoryPath, IN PCSTR DirectoryPath,
IN LPCSTR AnsiFileName, IN PCSTR AnsiFileName,
IN LPCSTR OemFileName, IN PCSTR OemFileName,
IN LPCSTR LanguageFileName); IN PCSTR LanguageFileName);
BOOLEAN BOOLEAN
WinLdrAddDriverToList(LIST_ENTRY *BootDriverListHead, WinLdrAddDriverToList(LIST_ENTRY *BootDriverListHead,
LPWSTR RegistryPath, LPWSTR RegistryPath,
@ -146,6 +146,6 @@ ARC_STATUS
LoadAndBootWindowsCommon( LoadAndBootWindowsCommon(
USHORT OperatingSystemVersion, USHORT OperatingSystemVersion,
PLOADER_PARAMETER_BLOCK LoaderBlock, PLOADER_PARAMETER_BLOCK LoaderBlock,
LPCSTR BootOptions, PCSTR BootOptions,
LPCSTR BootPath, PCSTR BootPath,
BOOLEAN Setup); BOOLEAN Setup);

View file

@ -19,13 +19,13 @@ DBG_DEFAULT_CHANNEL(WINDOWS);
ULONG TotalNLSSize = 0; ULONG TotalNLSSize = 0;
static BOOLEAN static BOOLEAN
WinLdrGetNLSNames(LPSTR AnsiName, WinLdrGetNLSNames(PSTR AnsiName,
LPSTR OemName, PSTR OemName,
LPSTR LangName); PSTR LangName);
static VOID static VOID
WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead, WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead,
IN LPCSTR DirectoryPath); IN PCSTR SystemRoot);
/* FUNCTIONS **************************************************************/ /* FUNCTIONS **************************************************************/
@ -171,14 +171,14 @@ WinLdrInitSystemHive(
} }
BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
IN LPCSTR DirectoryPath) IN PCSTR SystemRoot)
{ {
CHAR SearchPath[1024]; CHAR SearchPath[1024];
CHAR AnsiName[256], OemName[256], LangName[256]; CHAR AnsiName[256], OemName[256], LangName[256];
BOOLEAN Success; BOOLEAN Success;
/* Scan registry and prepare boot drivers list */ /* Scan registry and prepare boot drivers list */
WinLdrScanRegistry(&LoaderBlock->BootDriverListHead, DirectoryPath); WinLdrScanRegistry(&LoaderBlock->BootDriverListHead, SystemRoot);
/* Get names of NLS files */ /* Get names of NLS files */
Success = WinLdrGetNLSNames(AnsiName, OemName, LangName); Success = WinLdrGetNLSNames(AnsiName, OemName, LangName);
@ -191,7 +191,7 @@ BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
TRACE("NLS data %s %s %s\n", AnsiName, OemName, LangName); TRACE("NLS data %s %s %s\n", AnsiName, OemName, LangName);
/* Load NLS data */ /* Load NLS data */
strcpy(SearchPath, DirectoryPath); strcpy(SearchPath, SystemRoot);
strcat(SearchPath, "system32\\"); strcat(SearchPath, "system32\\");
Success = WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName); Success = WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName);
TRACE("NLS data loading %s\n", Success ? "successful" : "failed"); TRACE("NLS data loading %s\n", Success ? "successful" : "failed");
@ -208,9 +208,9 @@ BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
// Queries registry for those three file names // Queries registry for those three file names
static BOOLEAN static BOOLEAN
WinLdrGetNLSNames(LPSTR AnsiName, WinLdrGetNLSNames(PSTR AnsiName,
LPSTR OemName, PSTR OemName,
LPSTR LangName) PSTR LangName)
{ {
LONG rc = ERROR_SUCCESS; LONG rc = ERROR_SUCCESS;
HKEY hKey; HKEY hKey;
@ -218,7 +218,7 @@ WinLdrGetNLSNames(LPSTR AnsiName,
WCHAR NameBuffer[80]; WCHAR NameBuffer[80];
ULONG BufferSize; ULONG BufferSize;
/* open the codepage key */ /* Open the CodePage key */
rc = RegOpenKey(NULL, rc = RegOpenKey(NULL,
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage", L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage",
&hKey); &hKey);
@ -266,7 +266,7 @@ WinLdrGetNLSNames(LPSTR AnsiName,
} }
sprintf(OemName, "%S", NameBuffer); sprintf(OemName, "%S", NameBuffer);
/* Open the language key */ /* Open the Language key */
rc = RegOpenKey(NULL, rc = RegOpenKey(NULL,
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\Language", L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\Language",
&hKey); &hKey);
@ -299,10 +299,10 @@ WinLdrGetNLSNames(LPSTR AnsiName,
BOOLEAN BOOLEAN
WinLdrLoadNLSData(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, WinLdrLoadNLSData(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
IN LPCSTR DirectoryPath, IN PCSTR DirectoryPath,
IN LPCSTR AnsiFileName, IN PCSTR AnsiFileName,
IN LPCSTR OemFileName, IN PCSTR OemFileName,
IN LPCSTR LanguageFileName) IN PCSTR LanguageFileName)
{ {
CHAR FileName[255]; CHAR FileName[255];
ULONG AnsiFileId; ULONG AnsiFileId;
@ -486,7 +486,7 @@ Failure:
static VOID static VOID
WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead, WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead,
IN LPCSTR DirectoryPath) IN PCSTR SystemRoot)
{ {
LONG rc = 0; LONG rc = 0;
HKEY hGroupKey, hOrderKey, hServiceKey, hDriverKey; HKEY hGroupKey, hOrderKey, hServiceKey, hDriverKey;
@ -614,11 +614,11 @@ WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead,
{ {
TRACE_CH(REACTOS, "ImagePath: not found\n"); TRACE_CH(REACTOS, "ImagePath: not found\n");
TempImagePath[0] = 0; TempImagePath[0] = 0;
RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s\\system32\\drivers\\%S.sys", DirectoryPath, ServiceName); RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s\\system32\\drivers\\%S.sys", SystemRoot, ServiceName);
} }
else if (TempImagePath[0] != L'\\') else if (TempImagePath[0] != L'\\')
{ {
RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s%S", DirectoryPath, TempImagePath); RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s%S", SystemRoot, TempImagePath);
} }
else else
{ {
@ -694,11 +694,11 @@ WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead,
{ {
TRACE_CH(REACTOS, "ImagePath: not found\n"); TRACE_CH(REACTOS, "ImagePath: not found\n");
TempImagePath[0] = 0; TempImagePath[0] = 0;
RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%ssystem32\\drivers\\%S.sys", DirectoryPath, ServiceName); RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%ssystem32\\drivers\\%S.sys", SystemRoot, ServiceName);
} }
else if (TempImagePath[0] != L'\\') else if (TempImagePath[0] != L'\\')
{ {
RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s%S", DirectoryPath, TempImagePath); RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s%S", SystemRoot, TempImagePath);
} }
else else
{ {