[FREELOADER]

- Fix DoOptionsMenu and implement AppendBootOptions to support F8 boot options
- Fixes bug 5363

svn path=/trunk/; revision=47387
This commit is contained in:
Cameron Gutman 2010-05-28 22:54:27 +00:00
parent 18c065e00d
commit 799b6ad5b8
4 changed files with 55 additions and 0 deletions

View file

@ -20,3 +20,4 @@
#pragma once #pragma once
VOID DoOptionsMenu(VOID); VOID DoOptionsMenu(VOID);
VOID AppendBootTimeOptions(PCHAR BootOptions);

View file

@ -69,6 +69,15 @@ enum OptionMenuItems
ULONG OptionsMenuItemCount = sizeof(OptionsMenuList) / sizeof(OptionsMenuList[0]); ULONG OptionsMenuItemCount = sizeof(OptionsMenuList) / sizeof(OptionsMenuList[0]);
BOOLEAN SafeMode = FALSE;
BOOLEAN SafeModeWithNetworking = FALSE;
BOOLEAN SafeModeWithCommandPrompt = FALSE;
BOOLEAN BootLogging = FALSE;
BOOLEAN VgaMode = FALSE;
BOOLEAN LastKnownGoodConfiguration = FALSE;
BOOLEAN DirectoryServicesRepairMode = FALSE;
BOOLEAN DebuggingMode = FALSE;
VOID DoOptionsMenu(VOID) VOID DoOptionsMenu(VOID)
{ {
ULONG SelectedMenuItem; ULONG SelectedMenuItem;
@ -85,22 +94,33 @@ VOID DoOptionsMenu(VOID)
switch (SelectedMenuItem) switch (SelectedMenuItem)
{ {
case SAFE_MODE: case SAFE_MODE:
SafeMode = TRUE;
BootLogging = TRUE;
break; break;
case SAFE_MODE_WITH_NETWORKING: case SAFE_MODE_WITH_NETWORKING:
SafeModeWithNetworking = TRUE;
BootLogging = TRUE;
break; break;
case SAFE_MODE_WITH_COMMAND_PROMPT: case SAFE_MODE_WITH_COMMAND_PROMPT:
SafeModeWithCommandPrompt = TRUE;
BootLogging = TRUE;
break; break;
//case SEPARATOR1: //case SEPARATOR1:
// break; // break;
case ENABLE_BOOT_LOGGING: case ENABLE_BOOT_LOGGING:
BootLogging = TRUE;
break; break;
case ENABLE_VGA_MODE: case ENABLE_VGA_MODE:
VgaMode = TRUE;
break; break;
case LAST_KNOWN_GOOD_CONFIGURATION: case LAST_KNOWN_GOOD_CONFIGURATION:
LastKnownGoodConfiguration = TRUE;
break; break;
case DIRECTORY_SERVICES_RESTORE_MODE: case DIRECTORY_SERVICES_RESTORE_MODE:
DirectoryServicesRepairMode = TRUE;
break; break;
case DEBUGGING_MODE: case DEBUGGING_MODE:
DebuggingMode = TRUE;
break; break;
//case SEPARATOR2: //case SEPARATOR2:
// break; // break;
@ -117,3 +137,29 @@ VOID DoOptionsMenu(VOID)
} }
} }
VOID AppendBootTimeOptions(PCHAR BootOptions)
{
if (SafeMode)
strcat(BootOptions, " /SAFEBOOT:MINIMAL /SOS"); //FIXME: NOGUIBOOT should also be specified
if (SafeModeWithNetworking)
strcat(BootOptions, " /SAFEBOOT:NETWORK /SOS"); //FIXME: NOGUIBOOT should also be specified
if (SafeModeWithCommandPrompt)
strcat(BootOptions, " /SAFEBOOT:MINIMAL(ALTERNATESHELL) /SOS"); //FIXME: NOGUIBOOT should also be specified
if (BootLogging)
strcat(BootOptions, " /BOOTLOG");
if (VgaMode)
strcat(BootOptions, " /BASEVIDEO");
if (LastKnownGoodConfiguration)
DbgPrint("Last known good configuration is not supported yet!\n");
if (DirectoryServicesRepairMode)
strcat(BootOptions, " /SAFEBOOT:DSREPAIR /SOS");
if (DebuggingMode)
strcat(BootOptions, " /DEBUG");
}

View file

@ -606,6 +606,11 @@ LoadAndBootReactOS(PCSTR OperatingSystemName)
// //
if (IniReadSettingByName(SectionId, "Options", value, sizeof(value))) if (IniReadSettingByName(SectionId, "Options", value, sizeof(value)))
{ {
//
// Append boot-time options
//
AppendBootTimeOptions(value);
// //
// Check if a ramdisk file was given // Check if a ramdisk file was given
// //

View file

@ -475,6 +475,9 @@ LoadAndBootWindows(PCSTR OperatingSystemName,
DPRINTM(DPRINT_WINDOWS,"BootOptions: '%s'\n", BootOptions); DPRINTM(DPRINT_WINDOWS,"BootOptions: '%s'\n", BootOptions);
} }
/* Append boot-time options */
AppendBootTimeOptions(BootOptions);
// //
// Check if a ramdisk file was given // Check if a ramdisk file was given
// //