64 BootEntry->BootFilePath =
NULL;
75 BootEntry->FriendlyName =
L"\"ReactOS\"";
81 BootEntry->FriendlyName =
L"\"ReactOS (Debug)\"";
82 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS";
88 BootEntry->FriendlyName =
L"\"ReactOS (VBox Debug)\"";
89 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=VBOX /SOS";
96 BootEntry->FriendlyName =
L"\"ReactOS (RosDbg)\"";
97 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /KDSERIAL";
103 BootEntry->FriendlyName =
L"\"ReactOS (Screen)\"";
104 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=SCREEN /SOS";
109 BootEntry->FriendlyName =
L"\"ReactOS (Log file)\"";
110 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=FILE /SOS";
115 BootEntry->FriendlyName =
L"\"ReactOS (RAM Disk)\"";
116 Options->OsLoadPath =
L"ramdisk(0)\\ReactOS";
117 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /RDPATH=reactos.img /RDIMAGEOFFSET=32256";
122 BootEntry->FriendlyName =
L"\"ReactOS (Emergency Management Services)\"";
124 Options->OsLoadOptions =
L"/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /redirect=com2 /redirectbaudrate=115200";
130#if DBG && !defined(_WINKD_)
170 PVOID BootStoreHandle;
196 PVOID BootStoreHandle;
210 BootEntry->BootFilePath =
NULL;
218 Options->Partition = BootPartition;
270 DPRINT(
" An installation '%S' of unsupported type %lu\n",
271 BootEntry->FriendlyName, BootEntry->OsOptionsLength);
280 DPRINT1(
" A Win2k3 install '%S' without an ARC path?!\n", BootEntry->FriendlyName);
300 DPRINT(
" Found a candidate Win2k3 install '%S' with ARC path '%S'\n",
301 BootEntry->FriendlyName,
Options->OsLoadPath);
305 DPRINT(
"EnumerateReactOSEntries: OsLoadPath: '%S'\n",
Options->OsLoadPath);
318 L"ReactOS_%lu",
Data->i);
320 L"\"ReactOS %lu\"",
Data->i);
333 PVOID BootStoreHandle;
347 Data.ArcPath = ArcPath;
358 if (!
Data.UseExistingEntry)
364 BootEntry->BootFilePath =
NULL;
374 BootEntry->FriendlyName =
Data.OsName;
392 PVOID BootStoreHandle;
408 Data.ArcPath = EntryName;
419 if (!
Data.UseExistingEntry
422 BootEntry->Version =
NtLdr;
423 BootEntry->BootFilePath =
NULL;
430 Options->OsLoadPath = EntryName;
434 BootEntry->FriendlyName = EntryValue;
555 IN PFS_INSTALL_BOOTCODE InstallBootCode)
590 DPRINT1(
"Unable to lock the volume before installing boot code. Status 0x%08x. Expect problems.\n", LockStatus);
594 Status = InstallBootCode(SrcPath, PartitionHandle, PartitionHandle);
602 DPRINT1(
"Unable to dismount the volume after installing boot code. Status 0x%08x. Expect problems.\n", LockStatus);
608 DPRINT1(
"Unable to unlock the volume after installing boot code. Status 0x%08x. Expect problems.\n", LockStatus);
624 IN PFS_INSTALL_BOOTCODE InstallBootCode)
766 IN PCWSTR DestinationDevicePathBuffer)
781 L"\\Device\\Harddisk%d\\Partition0",
786 SourceRootPath->Buffer,
L"\\loader\\dosmbr.bin");
792 SystemRootPath->Buffer,
L"mbr.old");
794 DPRINT1(
"Save MBR: %S ==> %S\n", DestinationDevicePathBuffer,
DstPath);
803 DPRINT1(
"Install MBR bootcode: %S ==> %S\n",
804 SourceMbrPathBuffer, DestinationDevicePathBuffer);
808 DestinationDevicePathBuffer,
827 DPRINT(
"System path: '%wZ'\n", SystemRootPath);
843 if (DoesFreeLdrExist)
846 DPRINT1(
"Update existing 'freeldr.ini'\n");
850 DPRINT1(
"UpdateFreeLoaderIni() failed (Status %lx)\n",
Status);
864 DPRINT1(
"Found Microsoft Windows NT/2000/XP boot loader\n");
867 if (DoesFreeLdrExist ==
FALSE)
870 DPRINT1(
"Create new 'freeldr.ini'\n");
874 DPRINT1(
"CreateFreeLoaderIniForReactOS() failed (Status %lx)\n",
Status);
881 if (
wcsicmp(FileSystemName,
L"FAT32") == 0)
888 SystemRootPath->Buffer,
892 DPRINT1(
"InstallBootCodeToFile(FAT32) failed (Status %lx)\n",
Status);
903 SystemRootPath->Buffer,
907 DPRINT1(
"InstallBootCodeToFile(FAT16) failed (Status %lx)\n",
Status);
916 DPRINT1(
"Update 'boot.ini'\n");
940 DPRINT1(
"Found COMPAQ MS-DOS 1.x (1.11, 1.12) / MS-DOS 1.25 boot loader\n");
945 BootPartition =
L"1";
954 DPRINT1(
"Found Microsoft DOS or Windows 9x boot loader\n");
959 BootPartition =
L"1";
968 DPRINT1(
"Found IBM PC-DOS or DR-DOS 5.x or IBM OS/2 1.0\n");
971 Description =
L"\"IBM PC-DOS or DR-DOS 5.x or IBM OS/2 1.0\"";
973 BootPartition =
L"1";
986 BootPartition =
L"1";
994 DPRINT1(
"Found Dell Real-Mode Kernel OS\n");
999 BootPartition =
L"1";
1008 DPRINT1(
"Found MS OS/2 1.x\n");
1013 BootPartition =
L"1";
1022 DPRINT1(
"Found MS/IBM OS/2\n");
1024 Section =
L"IBMOS2";
1027 BootPartition =
L"1";
1034 DPRINT1(
"Found FreeDOS boot loader\n");
1039 BootPartition =
L"1";
1045 DPRINT1(
"No or unknown boot loader found\n");
1047 Section =
L"Unknown";
1050 BootPartition =
L"1";
1055 if (DoesFreeLdrExist ==
FALSE)
1058 DPRINT1(
"Create new 'freeldr.ini'\n");
1063 SystemRootPath->Buffer, DestinationArcPath->Buffer,
1068 DPRINT1(
"CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n",
Status);
1075 DPRINT1(
"Save bootsector: %S ==> %S\n", SystemRootPath->Buffer,
DstPath);
1088 DPRINT1(
"CreateFreeLoaderIniForReactOS() failed (Status %lx)\n",
Status);
1094 if (
wcsicmp(FileSystemName,
L"FAT32") == 0)
1099 DPRINT1(
"Install FAT32 bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
1104 DPRINT1(
"InstallBootCodeToDisk(FAT32) failed (Status %lx)\n",
Status);
1113 DPRINT1(
"Install FAT16 bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
1117 DPRINT1(
"InstallBootCodeToDisk(FAT16) failed (Status %lx)\n",
Status);
1140 DPRINT(
"System path: '%wZ'\n", SystemRootPath);
1155 DoesFreeLdrExist =
DoesFileExist_2(SystemRootPath->Buffer,
L"freeldr.ini");
1156 if (DoesFreeLdrExist)
1159 DPRINT1(
"Update existing 'freeldr.ini'\n");
1163 DPRINT1(
"UpdateFreeLoaderIni() failed (Status %lx)\n",
Status);
1171 if (DoesFreeLdrExist ==
FALSE)
1174 DPRINT1(
"Create new 'freeldr.ini'\n");
1177 DPRINT1(
"*nix or unknown boot loader found\n");
1184 SystemRootPath->Buffer, DestinationArcPath->Buffer,
1185 L"Linux",
L"\"Linux\"",
1189 DPRINT1(
"CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n",
Status);
1196 DPRINT1(
"Save bootsector: %S ==> %S\n", SystemRootPath->Buffer,
DstPath);
1209 DPRINT1(
"CreateFreeLoaderIniForReactOS() failed (Status %lx)\n",
Status);
1218 DPRINT1(
"Install BTRFS bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
1222 DPRINT1(
"InstallBootCodeToDisk(BTRFS) failed (Status %lx)\n",
Status);
1243 DPRINT(
"System path: '%wZ'\n", SystemRootPath);
1258 DoesFreeLdrExist =
DoesFileExist_2(SystemRootPath->Buffer,
L"freeldr.ini");
1259 if (DoesFreeLdrExist)
1262 DPRINT1(
"Update existing 'freeldr.ini'\n");
1266 DPRINT1(
"UpdateFreeLoaderIni() failed (Status %lx)\n",
Status);
1275 DPRINT1(
"Create new 'freeldr.ini'\n");
1278 DPRINT1(
"*nix or unknown boot loader found\n");
1285 SystemRootPath->Buffer, DestinationArcPath->Buffer,
1286 L"Linux",
L"\"Linux\"",
1290 DPRINT1(
"CreateFreeLoaderIniForReactOSAndBootSector() failed (Status %lx)\n",
Status);
1297 DPRINT1(
"Save bootsector: %S ==> %S\n", SystemRootPath->Buffer,
DstPath);
1310 DPRINT1(
"CreateFreeLoaderIniForReactOS() failed (Status %lx)\n",
Status);
1320 DPRINT1(
"Install NTFS bootcode: %S ==> %S\n", SrcPath, SystemRootPath->Buffer);
1324 DPRINT1(
"InstallBootCodeToDisk(NTFS) failed (Status %lx)\n",
Status);
1339 if (
wcsicmp(FileSystemName,
L"FAT") == 0 ||
1340 wcsicmp(FileSystemName,
L"FAT32") == 0)
1347 else if (
wcsicmp(FileSystemName,
L"NTFS") == 0)
1351 DestinationArcPath);
1353 else if (
wcsicmp(FileSystemName,
L"BTRFS") == 0)
1357 DestinationArcPath);
1370 DPRINT1(
"Unknown file system '%S'\n", FileSystemName);
1404 DPRINT1(
"FAT FS non existent on this system?!\n");
1424 DPRINT(
"Create new 'freeldr.ini'\n");
1428 DPRINT1(
"CreateFreeLoaderIniForReactOS() failed (Status %lx)\n",
Status);
1436 DPRINT(
"Install FAT12 bootcode: %S ==> %S\n", SrcPath,
DstPath);
1440 DPRINT1(
"InstallBootCodeToDisk(FAT12) failed (Status %lx)\n",
Status);
#define OBJ_NAME_PATH_SEPARATOR
NTSTATUS OpenBootStore(OUT PVOID *Handle, IN PCWSTR SystemPartition, IN BOOT_STORE_TYPE Type, IN BOOLEAN CreateNew)
NTSTATUS SetBootStoreOptions(IN PVOID Handle, IN PBOOT_STORE_OPTIONS BootOptions, IN ULONG FieldsToChange)
NTSTATUS AddBootStoreEntry(IN PVOID Handle, IN PBOOT_STORE_ENTRY BootEntry, IN ULONG_PTR BootEntryKey)
NTSTATUS EnumerateBootStoreEntries(IN PVOID Handle, IN PENUM_BOOT_ENTRIES_ROUTINE EnumBootEntriesRoutine, IN PVOID Parameter OPTIONAL)
NTSTATUS CloseBootStore(IN PVOID Handle)
struct _BOOT_SECTOR_OPTIONS * PBOOT_SECTOR_OPTIONS
struct _NTOS_OPTIONS NTOS_OPTIONS
#define BOOT_SECTOR_OPTIONS_SIGNATURE
struct _NTOS_OPTIONS * PNTOS_OPTIONS
struct _BOOT_STORE_ENTRY * PBOOT_STORE_ENTRY
#define NTOS_OPTIONS_SIGNATURE
struct _BOOT_SECTOR_OPTIONS BOOT_SECTOR_OPTIONS
enum _BOOT_STORE_TYPE BOOT_STORE_TYPE
VOID FreeBootCode(IN OUT PBOOTCODE BootCodeInfo)
NTSTATUS ReadBootCodeByHandle(IN OUT PBOOTCODE BootCodeInfo, IN HANDLE FileHandle, IN ULONG Length OPTIONAL)
NTSTATUS ReadBootCodeFromFile(IN OUT PBOOTCODE BootCodeInfo, IN PUNICODE_STRING FilePath, IN ULONG Length OPTIONAL)
NTSTATUS InstallVBRToPartition(IN PUNICODE_STRING SystemRootPath, IN PUNICODE_STRING SourceRootPath, IN PUNICODE_STRING DestinationArcPath, IN PCWSTR FileSystemName)
static NTSTATUS InstallMbrBootCode(IN PCWSTR SrcPath, IN HANDLE DstPath, IN HANDLE DiskHandle)
static NTSTATUS SaveBootSector(IN PCWSTR RootPath, IN PCWSTR DstPath, IN ULONG Length)
NTSTATUS InstallFatBootcodeToFloppy(IN PUNICODE_STRING SourceRootPath, IN PUNICODE_STRING DestinationArcPath)
static NTSTATUS UpdateBootIni(IN PCWSTR IniPath, IN PCWSTR EntryName, IN PCWSTR EntryValue)
static NTSTATUS NTAPI EnumerateReactOSEntries(IN BOOT_STORE_TYPE Type, IN PBOOT_STORE_ENTRY BootEntry, IN PVOID Parameter OPTIONAL)
static NTSTATUS CreateFreeLoaderIniForReactOS(IN PCWSTR IniPath, IN PCWSTR ArcPath)
static NTSTATUS InstallBootCodeToFile(IN PCWSTR SrcPath, IN PCWSTR DstPath, IN PCWSTR RootPath, IN PFS_INSTALL_BOOTCODE InstallBootCode)
NTSTATUS InstallMbrBootCodeToDisk(IN PUNICODE_STRING SystemRootPath, IN PUNICODE_STRING SourceRootPath, IN PCWSTR DestinationDevicePathBuffer)
static BOOLEAN IsThereAValidBootSector(IN PCWSTR RootPath)
static NTSTATUS CreateFreeLoaderIniForReactOSAndBootSector(IN PCWSTR IniPath, IN PCWSTR ArcPath, IN PCWSTR Section, IN PCWSTR Description, IN PCWSTR BootDrive, IN PCWSTR BootPartition, IN PCWSTR BootSector)
struct _ENUM_REACTOS_ENTRIES_DATA * PENUM_REACTOS_ENTRIES_DATA
static VOID TrimTrailingPathSeparators_UStr(IN OUT PUNICODE_STRING UnicodeString)
struct _ENUM_REACTOS_ENTRIES_DATA ENUM_REACTOS_ENTRIES_DATA
static NTSTATUS InstallBootCodeToDisk(IN PCWSTR SrcPath, IN PCWSTR RootPath, IN PFS_INSTALL_BOOTCODE InstallBootCode)
static NTSTATUS InstallFatBootcodeToPartition(IN PUNICODE_STRING SystemRootPath, IN PUNICODE_STRING SourceRootPath, IN PUNICODE_STRING DestinationArcPath, IN PCWSTR FileSystemName)
static NTSTATUS UpdateFreeLoaderIni(IN PCWSTR IniPath, IN PCWSTR ArcPath)
static VOID CreateFreeLoaderReactOSEntries(IN PVOID BootStoreHandle, IN PCWSTR ArcPath)
static NTSTATUS InstallNtfsBootcodeToPartition(IN PUNICODE_STRING SystemRootPath, IN PUNICODE_STRING SourceRootPath, IN PUNICODE_STRING DestinationArcPath)
static NTSTATUS InstallBtrfsBootcodeToPartition(IN PUNICODE_STRING SystemRootPath, IN PUNICODE_STRING SourceRootPath, IN PUNICODE_STRING DestinationArcPath)
_In_ PFCB _In_ LONGLONG FileOffset
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
static const WCHAR Description[]
#define FILE_ATTRIBUTE_NORMAL
static const WCHAR Signature[]
#define RtlCompareMemory(s1, s2, l)
NTSTATUS CombinePaths(OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN ...)
BOOLEAN DoesFileExist_2(IN PCWSTR PathName OPTIONAL, IN PCWSTR FileName)
NTSTATUS SetupCopyFile(IN PCWSTR SourceFileName, IN PCWSTR DestinationFileName, IN BOOLEAN FailIfExists)
#define DoesDirExist(RootDirectory, DirName)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
#define FILE_SYNCHRONOUS_IO_NONALERT
#define FILE_SEQUENTIAL_ONLY
#define OBJ_CASE_INSENSITIVE
#define RTL_FIELD_SIZE(type, field)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
#define FSCTL_LOCK_VOLUME
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define FSCTL_UNLOCK_VOLUME
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define FSCTL_DISMOUNT_VOLUME
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
NTSYSAPI NTSTATUS NTAPI NtFsControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_NO_MORE_ENTRIES
#define STATUS_NOT_SUPPORTED
NTSTRSAFEAPI RtlStringCchCopyW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEVAPI RtlStringCchPrintfW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
NTSTATUS InstallFat32BootCode(IN PCWSTR SrcPath, IN HANDLE DstPath, IN HANDLE RootPartition)
NTSTATUS FormatFileSystem(IN PCWSTR DriveRoot, IN PCWSTR FileSystemName, IN FMIFS_MEDIA_FLAG MediaFlag, IN PCWSTR Label, IN BOOLEAN QuickFormat, IN ULONG ClusterSize, IN PFMIFSCALLBACK Callback)
NTSTATUS InstallBtrfsBootCode(IN PCWSTR SrcPath, IN HANDLE DstPath, IN HANDLE RootPartition)
NTSTATUS InstallNtfsBootCode(IN PCWSTR SrcPath, IN HANDLE DstPath, IN HANDLE RootPartition)
IN HANDLE IN HANDLE RootPartition
#define NTFS_BOOTSECTOR_SIZE
#define InstallFat16BootCode
#define InstallFat12BootCode
#define BTRFS_BOOTSECTOR_SIZE
BOOLEAN IsUnattendedSetup
#define STATUS_DEVICE_NOT_READY
PULONG MinorVersion OPTIONAL
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options