Author: hbelusca
Date: Sat Jun 3 14:55:18 2017
New Revision: 74762
URL:
http://svn.reactos.org/svn/reactos?rev=74762&view=rev
Log:
[FREELDR]: Adjust WinLdrInitSystemHive() and its callers to load either the regular SYSTEM
hive, or the SETUPREG.HIV setup system hive, at startup. We now run the 1st-stage setup
with a regular system hive, similarly to what's done for the LiveCD, or for a regular
ROS installation. The ExpInTextModeSetup hacks I previously removed are indeed now
unneeded.
Modified:
branches/setup_improvements/boot/freeldr/freeldr/ntldr/setupldr.c
branches/setup_improvements/boot/freeldr/freeldr/ntldr/winldr.c
branches/setup_improvements/boot/freeldr/freeldr/ntldr/wlregistry.c
Modified: branches/setup_improvements/boot/freeldr/freeldr/ntldr/setupldr.c
URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/freeldr…
==============================================================================
--- branches/setup_improvements/boot/freeldr/freeldr/ntldr/setupldr.c [iso-8859-1]
(original)
+++ branches/setup_improvements/boot/freeldr/freeldr/ntldr/setupldr.c [iso-8859-1] Sat Jun
3 14:55:18 2017
@@ -74,8 +74,13 @@
return;
}
+ TRACE("NLS data %s %s %s\n", AnsiName, OemName, LangName);
+
Success = WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName);
TRACE("NLS data loading %s\n", Success ? "successful" :
"failed");
+
+ /* TODO: Load OEM HAL font */
+ // Value "OemHalFont"
}
static VOID
@@ -127,6 +132,9 @@
}
} while (InfFindNextLine(&InfContext, &InfContext));
}
+
+
+/* SETUP STARTER **************************************************************/
VOID
LoadReactOSSetup(IN OperatingSystemItem* OperatingSystem,
@@ -143,6 +151,7 @@
LPCSTR LoadOptions;
LPSTR BootOptions;
BOOLEAN BootFromFloppy;
+ BOOLEAN Success;
ULONG i, ErrorLine;
HINF InfHandle;
INFCONTEXT InfContext;
@@ -162,6 +171,8 @@
"reactos\\",
NULL
};
+
+ UiDrawStatusText("Setup is loading...");
/* Get OS setting value */
SettingsValue[0] = ANSI_NULL;
@@ -303,8 +314,6 @@
TRACE("BootOptions: '%s'\n", BootOptions);
- UiDrawStatusText("Setup is loading...");
-
/* Allocate and minimalist-initialize LPB */
AllocateAndInitLPB(&LoaderBlock);
@@ -315,16 +324,29 @@
/* Set textmode setup flag */
SetupBlock->Flags = SETUPLDR_TEXT_MODE;
- /* Load NLS data, they are in system32 */
+ /* Load the system hive "setupreg.hiv" for setup */
+ UiDrawBackdrop();
+ UiDrawProgressBarCenter(15, 100, "Loading setup system hive...");
+ Success = WinLdrInitSystemHive(LoaderBlock, BootPath, TRUE);
+ TRACE("Setup SYSTEM hive %s\n", (Success ? "loaded" : "not
loaded"));
+ /* Bail out if failure */
+ if (!Success)
+ return;
+
+ /* Load NLS data, they are in the System32 directory of the installation medium */
strcpy(FileName, BootPath);
- strcat(FileName, "system32\\");
+ strcat(FileName, "SYSTEM32\\");
SetupLdrLoadNlsData(LoaderBlock, InfHandle, FileName);
+
+ // UiDrawStatusText("Press F6 if you need to install a 3rd-party SCSI or RAID
driver...");
/* Get a list of boot drivers */
SetupLdrScanBootDrivers(&LoaderBlock->BootDriverListHead, InfHandle,
BootPath);
/* Close the inf file */
InfCloseFile(InfHandle);
+
+ UiDrawStatusText("The Setup program is starting...");
/* Load ReactOS Setup */
LoadAndBootWindowsCommon(_WIN32_WINNT_WS03,
Modified: branches/setup_improvements/boot/freeldr/freeldr/ntldr/winldr.c
URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/freeldr…
==============================================================================
--- branches/setup_improvements/boot/freeldr/freeldr/ntldr/winldr.c [iso-8859-1]
(original)
+++ branches/setup_improvements/boot/freeldr/freeldr/ntldr/winldr.c [iso-8859-1] Sat Jun
3 14:55:18 2017
@@ -750,7 +750,7 @@
/* Load the system hive */
UiDrawBackdrop();
UiDrawProgressBarCenter(15, 100, "Loading system hive...");
- Success = WinLdrInitSystemHive(LoaderBlock, BootPath);
+ Success = WinLdrInitSystemHive(LoaderBlock, BootPath, FALSE);
TRACE("SYSTEM hive %s\n", (Success ? "loaded" : "not
loaded"));
/* Bail out if failure */
if (!Success)
Modified: branches/setup_improvements/boot/freeldr/freeldr/ntldr/wlregistry.c
URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/boot/freeldr…
==============================================================================
--- branches/setup_improvements/boot/freeldr/freeldr/ntldr/wlregistry.c [iso-8859-1]
(original)
+++ branches/setup_improvements/boot/freeldr/freeldr/ntldr/wlregistry.c [iso-8859-1] Sat
Jun 3 14:55:18 2017
@@ -30,20 +30,21 @@
/* FUNCTIONS **************************************************************/
-BOOLEAN
-WinLdrLoadSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
- IN LPCSTR DirectoryPath,
- IN LPCSTR HiveName)
+static BOOLEAN
+WinLdrLoadSystemHive(
+ IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
+ IN PCSTR DirectoryPath,
+ IN PCSTR HiveName)
{
ULONG FileId;
- CHAR FullHiveName[256];
+ CHAR FullHiveName[MAX_PATH];
ARC_STATUS Status;
FILEINFORMATION FileInfo;
ULONG HiveFileSize;
ULONG_PTR HiveDataPhysical;
PVOID HiveDataVirtual;
ULONG BytesRead;
- LPCWSTR FsService;
+ PCWSTR FsService;
/* Concatenate path and filename to get the full name */
strcpy(FullHiveName, DirectoryPath);
@@ -94,7 +95,7 @@
return FALSE;
}
- // Add boot filesystem driver to the list
+ /* Add boot filesystem driver to the list */
FsService = FsGetServiceName(FileId);
if (FsService)
{
@@ -116,25 +117,40 @@
return TRUE;
}
-BOOLEAN WinLdrInitSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
- IN LPCSTR DirectoryPath)
+BOOLEAN
+WinLdrInitSystemHive(
+ IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
+ IN PCSTR SystemRoot,
+ IN BOOLEAN Setup)
{
CHAR SearchPath[1024];
+ PCSTR HiveName;
BOOLEAN Success;
- // There is a simple logic here: try to load usual hive (system), if it
- // fails, then give system.alt a try, and finally try a system.sav
-
- // FIXME: For now we only try system
- strcpy(SearchPath, DirectoryPath);
- strcat(SearchPath, "SYSTEM32\\CONFIG\\");
- Success = WinLdrLoadSystemHive(LoaderBlock, SearchPath, "SYSTEM");
-
- // Fail if failed...
+ if (Setup)
+ {
+ strcpy(SearchPath, SystemRoot);
+ HiveName = "SETUPREG.HIV";
+ }
+ else
+ {
+ // There is a simple logic here: try to load usual hive (system), if it
+ // fails, then give system.alt a try, and finally try a system.sav
+
+ // FIXME: For now we only try system
+ strcpy(SearchPath, SystemRoot);
+ strcat(SearchPath, "SYSTEM32\\CONFIG\\");
+ HiveName = "SYSTEM";
+ }
+
+ ERR("WinLdrInitSystemHive: try to load hive %s%s\n", SearchPath,
HiveName);
+ Success = WinLdrLoadSystemHive(LoaderBlock, SearchPath, HiveName);
+
+ /* Fail if failed... */
if (!Success)
return FALSE;
- // Import what was loaded
+ /* Import what was loaded */
Success = RegImportBinaryHive(VaToPa(LoaderBlock->RegistryBase),
LoaderBlock->RegistryLength);
if (!Success)
{
@@ -142,7 +158,7 @@
return FALSE;
}
- // Initialize the 'CurrentControlSet' link
+ /* Initialize the 'CurrentControlSet' link */
if (RegInitCurrentControlSet(FALSE) != ERROR_SUCCESS)
{
UiMessageBox("Initializing CurrentControlSet link failed!");
@@ -159,10 +175,10 @@
CHAR AnsiName[256], OemName[256], LangName[256];
BOOLEAN Success;
- // Scan registry and prepare boot drivers list
+ /* Scan registry and prepare boot drivers list */
WinLdrScanRegistry(&LoaderBlock->BootDriverListHead, DirectoryPath);
- // Get names of NLS files
+ /* Get names of NLS files */
Success = WinLdrGetNLSNames(AnsiName, OemName, LangName);
if (!Success)
{
@@ -172,13 +188,15 @@
TRACE("NLS data %s %s %s\n", AnsiName, OemName, LangName);
- // Load NLS data
+ /* Load NLS data */
strcpy(SearchPath, DirectoryPath);
strcat(SearchPath, "SYSTEM32\\");
Success = WinLdrLoadNLSData(LoaderBlock, SearchPath, AnsiName, OemName, LangName);
TRACE("NLS data loading %s\n", Success ? "successful" :
"failed");
/* TODO: Load OEM HAL font */
+ // In HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage,
+ // REG_SZ value "OEMHAL"
return TRUE;
}
@@ -208,7 +226,7 @@
return FALSE;
}
- /* get ANSI codepage */
+ /* Get ANSI codepage */
BufferSize = sizeof(szIdBuffer);
rc = RegQueryValue(hKey, L"ACP", NULL, (PUCHAR)szIdBuffer,
&BufferSize);
if (rc != ERROR_SUCCESS)
@@ -227,7 +245,7 @@
}
sprintf(AnsiName, "%S", NameBuffer);
- /* get OEM codepage */
+ /* Get OEM codepage */
BufferSize = sizeof(szIdBuffer);
rc = RegQueryValue(hKey, L"OEMCP", NULL, (PUCHAR)szIdBuffer,
&BufferSize);
if (rc != ERROR_SUCCESS)
@@ -246,7 +264,7 @@
}
sprintf(OemName, "%S", NameBuffer);
- /* open the language key */
+ /* Open the language key */
rc = RegOpenKey(NULL,
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\Language",
&hKey);
@@ -256,7 +274,7 @@
return FALSE;
}
- /* get the Unicode case table */
+ /* Get the Unicode case table */
BufferSize = sizeof(szIdBuffer);
rc = RegQueryValue(hKey, L"Default", NULL, (PUCHAR)szIdBuffer,
&BufferSize);
if (rc != ERROR_SUCCESS)