21#elif defined(_M_AMD64)
22#define INF_ARCH "amd64"
25#elif defined(_M_ARM64)
26#define INF_ARCH "arm64"
54 ERR(
"Failed to find or get 'NLS/AnsiCodepage'\n");
63 ERR(
"Failed to find or get 'NLS/OemCodepage'\n");
72 ERR(
"Failed to find or get 'NLS/UnicodeCasetable'\n");
81 WARN(
"Failed to find or get 'NLS/OemHalFont'\n");
83 RtlInitEmptyUnicodeString(&OemHalFileName,
NULL, 0);
86 TRACE(
"NLS data: '%wZ' '%wZ' '%wZ' '%wZ'\n",
87 &AnsiFileName, &OemFileName, &LangFileName, &OemHalFileName);
96 TRACE(
"NLS data loading %s\n",
Success ?
"successful" :
"failed");
122 WARN(
"Failed to find 'BiosInfo/InfName'\n");
127 WARN(
"Failed to read 'InfName' value\n");
138 WARN(
"Could not load '%s'\n", ErrataFilePath);
142 LoaderBlock->Extension->EmInfFileImage =
PaToVa(PhysicalBase);
143 LoaderBlock->Extension->EmInfFileSize =
FileSize;
155 PCSTR Media, DriverName, dirIndex, ImagePath;
159 WCHAR DriverNameW[256];
167 PCSTR pFilesSection[] = {
"SourceDisksFiles." INF_ARCH,
"SourceDisksFiles"};
179 if ((
strcmp(Media,
"x") == 0) &&
185 L"%S\\%S", ImagePath, DriverName);
202 ERR(
"Could not add boot driver '%s'\n", DriverName);
226 TRACE(
"No required filesystem driver\n");
247 {
"/DEBUG/DEBUG=",
NULL,
"/NODEBUG"},
250 {
"/DEBUGPORT=SCREEN",
NULL,
"/NOGUIBOOT"},
253 {
"/HAL=/KERNEL=",
NULL,
"/DETECTHAL"},
256 {
"/PAE",
NULL,
"/NOPAE"},
259 {
"/EXECUTE",
"/NOEXECUTE=ALWAYSOFF",
"/NOEXECUTE/NOEXECUTE="},
262 {
"/NOEXECUTE/NOEXECUTE=",
NULL,
"/NOEXECUTE/NOEXECUTE="},
265 {
"/SAFEBOOT/SAFEBOOT:",
NULL,
"/SAFEBOOT/SAFEBOOT:"},
268#define TAG_BOOT_OPTIONS 'pOtB'
274 OUT PSTR* HigherPriorityOptions)
277 PCSTR NextOptions, NextOpt;
280 SIZE_T HighPriorOptsSize = 0;
291 if (HigherPriorityOptions)
292 *HigherPriorityOptions =
NULL;
295 if (!BootOptions || !*BootOptions)
327 if (HigherPriorityOptions)
337 if (HigherPriorityOptions)
340 if (!*HigherPriorityOptions)
353 *(*ExtraOptions) =
'\0';
354 if (HigherPriorityOptions)
355 *(*HigherPriorityOptions) =
'\0';
404 static PCSTR SourcePaths[] =
409#elif defined(_M_AMD64)
413#elif defined(_M_ARM64)
415#elif defined(_M_MPPC)
417#elif defined(_M_MRX000)
425 if (!ArgValue || !*ArgValue)
427 ERR(
"No 'BootType' value, aborting!\n");
430 if (
_stricmp(ArgValue,
"ReactOSSetup") != 0)
432 ERR(
"Unknown 'BootType' value '%s', aborting!\n", ArgValue);
440 ERR(
"No 'SystemPartition' specified, aborting!\n");
491 if (!*BootPath || BootPath[
strlen(BootPath) - 1] !=
'\\')
494 TRACE(
"BootPath: '%s'\n", BootPath);
503 TRACE(
"BootOptions(1): '%s'\n", BootOptions);
521 BootFromFloppy = !!
strstr(BootPath,
")fdisk(");
534 SystemPath = SourcePaths[
i];
555 TRACE(
"BootPath: '%s', SystemPath: '%s'\n", BootPath, SystemPath);
560 PCSTR OptionsToRemove[2] = {
"SIFOPTIONSOVERRIDE",
NULL};
568 sizeof(UserBootOptions),
578 PSTR OptionsToAdd[3];
579 PSTR OptionsToRemove[4];
585 WARN(
"Failed to get load options\n");
598 if (
InfFindFirstLine(InfHandle,
"SetupData",
"SetupDebugOptions", &InfContext))
601 WARN(
"Failed to get debug load options\n");
605 DbgLoadOptions =
"DEBUG";
612 if (LoadOptions && *LoadOptions)
629 OptionsToRemove[0] =
"NODEBUG";
632 &HigherPriorityOptions);
634 OptionsToRemove[1] = (HigherPriorityOptions ? HigherPriorityOptions :
"");
641 OptionsToAdd[0] = (
PSTR)DbgLoadOptions;
642 OptionsToRemove[2] = (
PSTR)DbgLoadOptions;
644 sizeof(UserBootOptions),
646 (
PCSTR*)OptionsToAdd,
647 (
PCSTR*)OptionsToRemove);
651 if (HigherPriorityOptions)
665 &HigherPriorityOptions);
667 OptionsToRemove[0] = (HigherPriorityOptions ? HigherPriorityOptions :
"");
671 OptionsToAdd[0] = (
PSTR)BootOptions;
672 OptionsToRemove[1] = (
PSTR)BootOptions;
674 sizeof(UserBootOptions),
676 (
PCSTR*)OptionsToAdd,
677 (
PCSTR*)OptionsToRemove);
681 if (HigherPriorityOptions)
690 BootOptions = UserBootOptions;
691 TRACE(
"BootOptions(2): '%s'\n", BootOptions);
703 LoaderBlock->SetupLdrBlock = SetupBlock;
711 TRACE(
"Setup SYSTEM hive %s\n", (
Success ?
"loaded" :
"not loaded"));
723 TRACE(
"Firmware Errata file %s\n", (
Success ?
"loaded" :
"not loaded"));
PSTR GetArgumentValue(_In_ ULONG Argc, _In_ PCHAR Argv[], _In_ PCSTR ArgumentName)
PPARTENTRY SystemPartition
ARC_STATUS RamDiskInitialize(IN BOOLEAN InitRamDisk, IN PCSTR LoadOptions OPTIONAL, IN PCSTR DefaultPath OPTIONAL)
#define DBG_DEFAULT_CHANNEL(ch)
VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
VOID UiDrawBackdrop(ULONG DrawHeight)
VOID UiUpdateProgressBar(_In_ ULONG Percentage, _In_opt_ PCSTR ProgressText)
ULONG UiGetScreenHeight(VOID)
VOID UiDrawProgressBarCenter(_In_ PCSTR ProgressText)
VOID UiDrawStatusText(PCSTR StatusText)
VOID UiMessageBox(_In_ PCSTR Format,...)
FORCEINLINE PVOID PaToVa(PVOID Pa)
static const WCHAR SystemRoot[]
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP char *__cdecl strstr(const char *, const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
_ACRTIMP char *__cdecl strrchr(const char *, int)
struct _FileName FileName
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ HANDLE _In_ ULONG FileNameLength
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
VOID AppendBootTimeOptions(_Inout_z_bytecount_(BootOptionsSize) PSTR BootOptions, _In_ SIZE_T BootOptionsSize)
BOOLEAN InfFindFirstLine(HINF InfHandle, PCSTR Section, PCSTR Key, PINFCONTEXT Context)
BOOLEAN InfGetData(PINFCONTEXT Context, PCSTR *Key, PCSTR *Data)
BOOLEAN InfOpenFile(PHINF InfHandle, PCSTR FileName, PULONG ErrorLine)
static struct proto Pass[]
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define UNREFERENCED_PARAMETER(P)
#define MAX_OPTIONS_LENGTH
BOOLEAN WinLdrLoadNLSData(_Inout_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ PCSTR DirectoryPath, _In_ PCUNICODE_STRING AnsiFileName, _In_ PCUNICODE_STRING OemFileName, _In_ PCUNICODE_STRING LangFileName, _In_ PCUNICODE_STRING OemHalFileName)
BOOLEAN WinLdrAddDriverToList(_Inout_ PLIST_ENTRY DriverListHead, _In_ BOOLEAN InsertAtHead, _In_ PCWSTR DriverName, _In_opt_ PCWSTR ImagePath, _In_opt_ PCWSTR GroupName, _In_ ULONG ErrorControl, _In_ ULONG Tag)
Inserts the specified driver entry into the driver list, or updates an existing entry with new ImageP...
BOOLEAN WinLdrInitSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR SystemRoot, IN BOOLEAN Setup)
PCSTR NtLdrGetOptionEx(_In_ PCSTR Options, _In_ PCSTR OptionName, _Out_opt_ PULONG OptionLength)
PCSTR NtLdrGetNextOption(_Inout_ PCSTR *Options, _Out_opt_ PULONG OptionLength)
VOID NtLdrUpdateOptions(_Inout_updates_z_(BufferSize) PSTR LoadOptions, _In_ ULONG BufferSize, _In_ BOOLEAN Append, _In_opt_ PCSTR OptionsToAdd[], _In_opt_ PCSTR OptionsToRemove[])
Updates the options in the buffer pointed by LoadOptions, of maximum size BufferSize,...
PCSTR NtLdrGetOptionExN(_In_ PCSTR Options, _In_reads_(OptNameLength) PCCH OptionName, _In_ ULONG OptNameLength, _Out_opt_ PULONG OptionLength)
PCSTR NtLdrGetOption(_In_ PCSTR Options, _In_ PCSTR OptionName)
NTSTRSAFEAPI RtlStringCbCatA(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
#define WINDOWS(string, interface)
#define _WIN32_WINNT_WS03
#define SETUPLDR_TEXT_MODE
static VOID SetupLdrLoadNlsData(_Inout_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ HINF InfHandle, _In_ PCSTR SearchPath)
ARC_STATUS LoadReactOSSetup(IN ULONG Argc, IN PCHAR Argv[], IN PCHAR Envp[])
static VOID SetupLdrScanBootDrivers(_Inout_ PLIST_ENTRY BootDriverListHead, _In_ HINF InfHandle, _In_ PCSTR SearchPath)
VOID NtLdrGetHigherPriorityOptions(IN PCSTR BootOptions, OUT PSTR *ExtraOptions, OUT PSTR *HigherPriorityOptions)
static BOOLEAN SetupLdrInitErrataInf(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN HINF InfHandle, IN PCSTR SystemRoot)
static const struct @168 HighPriorOptionsMap[]
VOID AllocateAndInitLPB(IN USHORT VersionToBoot, OUT PLOADER_PARAMETER_BLOCK *OutLoaderBlock)
LIST_ENTRY BootDriverListHead
SETUP_LOADER_BLOCK SetupBlock
#define RtlZeroMemory(Destination, Length)
BOOLEAN InfGetDataField(PINFCONTEXT Context, ULONG FieldIndex, PWCHAR *Data)
VOID InfCloseFile(HINF InfHandle)
BOOLEAN InfFindNextLine(PINFCONTEXT ContextIn, PINFCONTEXT ContextOut)
VOID NtLdrNormalizeOptions(_Inout_ PSTR LoadOptions)
Normalize in-place the NT boot options by removing any leading '/', normalizing TABs to spaces,...
PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size, TYPE_OF_MEMORY MemoryType)
ARC_STATUS LoadAndBootWindowsCommon(_In_ USHORT OperatingSystemVersion, _In_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ PCSTR BootOptions, _In_ PCSTR SystemPartition, _In_ PCSTR BootPath)
PLOADER_SYSTEM_BLOCK WinLdrSystemBlock
#define SERVICE_ERROR_CRITICAL
#define SERVICE_ERROR_NORMAL