385{
403
404 static PCSTR SourcePaths[] =
405 {
406 "",
407#if defined(_M_IX86)
408 "I386\\",
409#elif defined(_M_AMD64)
410 "AMD64\\",
411#elif defined(_M_ARM)
412 "ARM\\",
413#elif defined(_M_ARM64)
414 "ARM64\\",
415#elif defined(_M_MPPC)
416 "PPC\\",
417#elif defined(_M_MRX000)
418 "MIPS\\",
419#endif
420 "reactos\\",
421 };
422
423
425 if (!ArgValue || !*ArgValue)
426 {
427 ERR(
"No 'BootType' value, aborting!\n");
429 }
430 if (
_stricmp(ArgValue,
"ReactOSSetup") != 0)
431 {
432 ERR(
"Unknown 'BootType' value '%s', aborting!\n", ArgValue);
434 }
435
436
439 {
440 ERR(
"No 'SystemPartition' specified, aborting!\n");
442 }
443
444
448
449
452 if (ArgValue)
453 {
455 }
456 else
457 {
458
459
460
461
462
463
464
466 }
467
468
469
470
471
472
473
475 {
476
478
479
481
482
485
486
488 }
489
490
491 if (!*BootPath || BootPath[
strlen(BootPath) - 1] !=
'\\')
493
494 TRACE(
"BootPath: '%s'\n", BootPath);
495
496
497
498
499
501 if (!BootOptions)
502 BootOptions = "";
503 TRACE(
"BootOptions(1): '%s'\n", BootOptions);
504
505
508 {
509
512 {
517 }
518 }
519
520
521 BootFromFloppy = !!
strstr(BootPath,
")fdisk(");
522
524
525
528 {
530 {
533 }
534 SystemPath = SourcePaths[
i];
535
536
539
540
544 {
545
546 break;
547 }
548 else
549 {
550 if (ErrorLine != -1)
552 }
553 }
554
555 TRACE(
"BootPath: '%s', SystemPath: '%s'\n", BootPath, SystemPath);
556
557
559 {
560 PCSTR OptionsToRemove[2] = {
"SIFOPTIONSOVERRIDE",
NULL};
561
562
563
565
566
568 sizeof(UserBootOptions),
571 OptionsToRemove);
572 }
573 else
574 {
578 PSTR OptionsToAdd[3];
579 PSTR OptionsToRemove[4];
580
581
583 {
585 WARN(
"Failed to get load options\n");
586 }
587
588#if !DBG
589
590
591
594 {
595#else
596
597#endif
598 if (
InfFindFirstLine(InfHandle,
"SetupData",
"SetupDebugOptions", &InfContext))
599 {
601 WARN(
"Failed to get debug load options\n");
602 }
603
604 if (!DbgLoadOptions)
605 DbgLoadOptions = "DEBUG";
606#if !DBG
607 }
608#endif
609
610
612 if (LoadOptions && *LoadOptions)
614
615
616 if (DbgLoadOptions)
617 {
620
621
622
623
624
625
626
627
628
629 OptionsToRemove[0] = "NODEBUG";
632 &HigherPriorityOptions);
634 OptionsToRemove[1] = (HigherPriorityOptions ? HigherPriorityOptions : "");
635
636
637
638
639
640
641 OptionsToAdd[0] = (
PSTR)DbgLoadOptions;
642 OptionsToRemove[2] = (
PSTR)DbgLoadOptions;
644 sizeof(UserBootOptions),
646 (
PCSTR*)OptionsToAdd,
647 (
PCSTR*)OptionsToRemove);
648
651 if (HigherPriorityOptions)
653 }
654
657
658
659
660
661
662
665 &HigherPriorityOptions);
667 OptionsToRemove[0] = (HigherPriorityOptions ? HigherPriorityOptions : "");
668
669
670
671 OptionsToAdd[0] = (
PSTR)BootOptions;
672 OptionsToRemove[1] = (
PSTR)BootOptions;
674 sizeof(UserBootOptions),
676 (
PCSTR*)OptionsToAdd,
677 (
PCSTR*)OptionsToRemove);
678
681 if (HigherPriorityOptions)
683 }
684
685
687
688
690 BootOptions = UserBootOptions;
691 TRACE(
"BootOptions(2): '%s'\n", BootOptions);
692
693
697
698
700
701
703 LoaderBlock->SetupLdrBlock = SetupBlock;
704
705
707
708
711 TRACE(
"Setup SYSTEM hive %s\n", (
Success ?
"loaded" :
"not loaded"));
712
715
716
720
721
723 TRACE(
"Firmware Errata file %s\n", (
Success ?
"loaded" :
"not loaded"));
724
725
726
727
728
730
731
733
735
736
738 LoaderBlock,
739 BootOptions,
741 BootPath);
742}
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)
VOID FrLdrHeapFree(PVOID MemoryPointer, 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)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP char *__cdecl strstr(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
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 InfOpenFile(PHINF InfHandle, PCSTR FileName, PULONG ErrorLine)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define MAX_OPTIONS_LENGTH
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)
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 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)
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
#define _WIN32_WINNT_WS03
#define SETUPLDR_TEXT_MODE
static VOID SetupLdrLoadNlsData(_Inout_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ HINF InfHandle, _In_ PCSTR SearchPath)
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)
VOID AllocateAndInitLPB(IN USHORT VersionToBoot, OUT PLOADER_PARAMETER_BLOCK *OutLoaderBlock)
SETUP_LOADER_BLOCK SetupBlock
BOOLEAN InfGetDataField(PINFCONTEXT Context, ULONG FieldIndex, PWCHAR *Data)
VOID InfCloseFile(HINF InfHandle)
VOID NtLdrNormalizeOptions(_Inout_ PSTR LoadOptions)
Normalize in-place the NT boot options by removing any leading '/', normalizing TABs to spaces,...
ARC_STATUS LoadAndBootWindowsCommon(_In_ USHORT OperatingSystemVersion, _In_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ PCSTR BootOptions, _In_ PCSTR SystemPartition, _In_ PCSTR BootPath)