496{
514
515 static PCSTR SourcePaths[] =
516 {
517 "",
518#if defined(_M_IX86)
519 "I386\\",
520#elif defined(_M_MPPC)
521 "PPC\\",
522#elif defined(_M_MRX000)
523 "MIPS\\",
524#endif
525 "reactos\\",
527 };
528
529
531 if (!ArgValue || !*ArgValue)
532 {
533 ERR(
"No 'BootType' value, aborting!\n");
535 }
536 if (
_stricmp(ArgValue,
"ReactOSSetup") != 0)
537 {
538 ERR(
"Unknown 'BootType' value '%s', aborting!\n", ArgValue);
540 }
541
542
545 {
546 ERR(
"No 'SystemPartition' specified, aborting!\n");
548 }
549
550
554
555
558 if (ArgValue)
559 {
561 }
562 else
563 {
564
565
566
567
568
569
570
572 }
573
574
575
576
577
578
579
581 {
582
584
585
587
588
591
592
594 }
595
596
597 if (!*BootPath || BootPath[
strlen(BootPath) - 1] !=
'\\')
599
600 TRACE(
"BootPath: '%s'\n", BootPath);
601
602
603
604
605
607 if (!BootOptions)
608 BootOptions = "";
609 TRACE(
"BootOptions(1): '%s'\n", BootOptions);
610
611
614 {
615
618 {
623 }
624 }
625
626
627 BootFromFloppy =
strstr(BootPath,
"fdisk") !=
NULL;
628
629
631 for (
i = BootFromFloppy ? 0 : 1; ;
i++)
632 {
633 SystemPath = SourcePaths[
i];
634 if (!SystemPath)
635 {
638 }
644 {
645 break;
646 }
647 }
648
649 TRACE(
"BootPath: '%s', SystemPath: '%s'\n", BootPath, SystemPath);
650
651
653 {
654 PCSTR OptionsToRemove[2] = {
"SIFOPTIONSOVERRIDE",
NULL};
655
656
657
659
660
662 sizeof(UserBootOptions),
665 OptionsToRemove);
666 }
667 else
668 {
672 PSTR OptionsToAdd[3];
673 PSTR OptionsToRemove[4];
674
675
677 {
679 WARN(
"Failed to get load options\n");
680 }
681
682#if !DBG
683
684
685
688 {
689#else
690
691#endif
692 if (
InfFindFirstLine(InfHandle,
"SetupData",
"SetupDebugOptions", &InfContext))
693 {
695 WARN(
"Failed to get debug load options\n");
696 }
697
698 if (!DbgLoadOptions)
699 DbgLoadOptions = "/DEBUG";
700#if !DBG
701 }
702#endif
703
704
706 if (LoadOptions && *LoadOptions)
708
709
710 if (DbgLoadOptions)
711 {
714
715
716
717
718
719
720
721
722
723 OptionsToRemove[0] = "/NODEBUG";
726 &HigherPriorityOptions);
728 OptionsToRemove[1] = (HigherPriorityOptions ? HigherPriorityOptions : "");
729
730
731
732
733
734
735 OptionsToAdd[0] = (
PSTR)DbgLoadOptions;
736 OptionsToRemove[2] = (
PSTR)DbgLoadOptions;
738 sizeof(UserBootOptions),
740 (
PCSTR*)OptionsToAdd,
741 (
PCSTR*)OptionsToRemove);
742
745 if (HigherPriorityOptions)
747 }
748
751
752
753
754
755
756
759 &HigherPriorityOptions);
761 OptionsToRemove[0] = (HigherPriorityOptions ? HigherPriorityOptions : "");
762
763
764
765 OptionsToAdd[0] = (
PSTR)BootOptions;
766 OptionsToRemove[1] = (
PSTR)BootOptions;
768 sizeof(UserBootOptions),
770 (
PCSTR*)OptionsToAdd,
771 (
PCSTR*)OptionsToRemove);
772
775 if (HigherPriorityOptions)
777 }
778
779
781
782
784 BootOptions = UserBootOptions;
785 TRACE(
"BootOptions(2): '%s'\n", BootOptions);
786
787
791
792
794
795
797 LoaderBlock->SetupLdrBlock = SetupBlock;
798
799
801
802
805 TRACE(
"Setup SYSTEM hive %s\n", (
Success ?
"loaded" :
"not loaded"));
806
809
810
814
815
817 TRACE(
"Firmware Errata file %s\n", (
Success ?
"loaded" :
"not loaded"));
818
819
820
821
822
824
825
827
829
830
832 LoaderBlock,
833 BootOptions,
835 BootPath);
836}
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 MAX_OPTIONS_LENGTH
BOOLEAN WinLdrInitSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR SystemRoot, IN BOOLEAN Setup)
PCSTR NtLdrGetOption(IN PCSTR Options, IN PCSTR OptionName)
PCSTR NtLdrGetOptionEx(IN PCSTR Options, IN PCSTR OptionName, OUT PULONG OptionLength OPTIONAL)
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
VOID NtLdrUpdateLoadOptions(IN OUT PSTR LoadOptions, IN ULONG BufferSize, IN BOOLEAN Append, IN PCSTR OptionsToAdd[] OPTIONAL, IN PCSTR OptionsToRemove[] OPTIONAL)
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)