* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include <freeldr.h>
#include <debug.h>
FinalSlash = strrchr(szFileName, '\\');
if(FinalSlash)
- szFileName = FinalSlash + 1;
+ szFileName = FinalSlash + 1;
/* Open the Driver */
FilePointer = FsOpenFile(szFileName);
/* Try under the system root in the main dir and drivers */
- if (FilePointer == NULL)
+ if (!FilePointer)
{
- strcpy(value, SystemRoot);
- if(value[strlen(value)-1] != '\\')
- strcat(value, "\\");
- strcat(value, szFileName);
- FilePointer = FsOpenFile(value);
+ strcpy(value, SystemRoot);
+ if(value[strlen(value)-1] != '\\')
+ strcat(value, "\\");
+ strcat(value, szFileName);
+ FilePointer = FsOpenFile(value);
}
- if (FilePointer == NULL)
+ if (!FilePointer)
{
- strcpy(value, SystemRoot);
- if(value[strlen(value)-1] != '\\')
- strcat(value, "\\");
- strcat(value, "SYSTEM32\\");
- strcat(value, szFileName);
- FilePointer = FsOpenFile(value);
+ strcpy(value, SystemRoot);
+ if(value[strlen(value)-1] != '\\')
+ strcat(value, "\\");
+ strcat(value, "SYSTEM32\\");
+ strcat(value, szFileName);
+ FilePointer = FsOpenFile(value);
}
- if (FilePointer == NULL)
+ if (!FilePointer)
{
- strcpy(value, SystemRoot);
- if(value[strlen(value)-1] != '\\')
- strcat(value, "\\");
- strcat(value, "SYSTEM32\\DRIVERS\\");
- strcat(value, szFileName);
- FilePointer = FsOpenFile(value);
+ strcpy(value, SystemRoot);
+ if(value[strlen(value)-1] != '\\')
+ strcat(value, "\\");
+ strcat(value, "SYSTEM32\\DRIVERS\\");
+ strcat(value, szFileName);
+ FilePointer = FsOpenFile(value);
}
/* Make sure we did */
- if (FilePointer == NULL) {
+ if (!FilePointer) {
/* Fail if file wasn't opened */
strcpy(value, szFileName);
FilePointer = FsOpenFile(szFileName);
/* Make sure we did */
- if (FilePointer == NULL) {
+ if (!FilePointer) {
/* Fail if file wasn't opened */
strcpy(value, szFileName);
rc = RegQueryValue(hKey, szIdBuffer, NULL, (PUCHAR)szNameBuffer, &BufferSize);
if (rc != ERROR_SUCCESS) {
- strcpy(szErrorOut, "ACP NLS Setting exists, but isn't readable");
- return(FALSE);
+ //strcpy(szErrorOut, "ACP NLS Setting exists, but isn't readable");
+ //return(FALSE);
+
+ /* HACK */
+ wcscpy(szNameBuffer, L"c_1252.nls");
}
/* load ANSI codepage table */
sprintf(szFileName,"%ssystem32\\%S", szSystemRoot, szNameBuffer);
- DbgPrint((DPRINT_REACTOS, "ANSI file: %s\n", szFileName));
+ DPRINTM(DPRINT_REACTOS, "ANSI file: %s\n", szFileName);
if (!FrLdrLoadNlsFile(szFileName, "ansi.nls")) {
strcpy(szErrorOut, "Couldn't load ansi.nls");
rc = RegQueryValue(hKey, szIdBuffer, NULL, (PUCHAR)szNameBuffer, &BufferSize);
if (rc != ERROR_SUCCESS) {
- strcpy(szErrorOut, "OEMCP NLS setting exists, but isn't readable");
- return(FALSE);
+ //strcpy(szErrorOut, "OEMCP NLS setting exists, but isn't readable");
+ //return(FALSE);
+
+ /* HACK */
+ wcscpy(szNameBuffer, L"c_437.nls");
}
/* load OEM codepage table */
sprintf(szFileName, "%ssystem32\\%S", szSystemRoot, szNameBuffer);
- DbgPrint((DPRINT_REACTOS, "Oem file: %s\n", szFileName));
+ DPRINTM(DPRINT_REACTOS, "Oem file: %s\n", szFileName);
if (!FrLdrLoadNlsFile(szFileName, "oem.nls")) {
strcpy(szErrorOut, "Couldn't load oem.nls");
rc = RegQueryValue(hKey, szIdBuffer, NULL, (PUCHAR)szNameBuffer, &BufferSize);
if (rc != ERROR_SUCCESS) {
- strcpy(szErrorOut, "Language Default setting exists, but isn't readable");
+ sprintf(szErrorOut, "Language Default setting exists, but isn't readable (%S)", szIdBuffer);
return(FALSE);
}
/* load Unicode case table */
sprintf(szFileName, "%ssystem32\\%S", szSystemRoot, szNameBuffer);
- DbgPrint((DPRINT_REACTOS, "Casemap file: %s\n", szFileName));
+ DPRINTM(DPRINT_REACTOS, "Casemap file: %s\n", szFileName);
if (!FrLdrLoadNlsFile(szFileName, "casemap.nls")) {
strcpy(szErrorOut, "casemap.nls");
&hGroupKey);
if (rc != ERROR_SUCCESS) {
- DbgPrint((DPRINT_REACTOS, "Failed to open the 'ServiceGroupOrder' key (rc %d)\n", (int)rc));
+ DPRINTM(DPRINT_REACTOS, "Failed to open the 'ServiceGroupOrder' key (rc %d)\n", (int)rc);
return;
}
&hOrderKey);
if (rc != ERROR_SUCCESS) {
- DbgPrint((DPRINT_REACTOS, "Failed to open the 'GroupOrderList' key (rc %d)\n", (int)rc));
+ DPRINTM(DPRINT_REACTOS, "Failed to open the 'GroupOrderList' key (rc %d)\n", (int)rc);
return;
}
&hServiceKey);
if (rc != ERROR_SUCCESS) {
- DbgPrint((DPRINT_REACTOS, "Failed to open the 'Services' key (rc %d)\n", (int)rc));
+ DPRINTM(DPRINT_REACTOS, "Failed to open the 'Services' key (rc %d)\n", (int)rc);
return;
}
/* Get the Name Group */
BufferSize = sizeof(GroupNameBuffer);
rc = RegQueryValue(hGroupKey, L"List", NULL, (PUCHAR)GroupNameBuffer, &BufferSize);
- DbgPrint((DPRINT_REACTOS, "RegQueryValue(): rc %d\n", (int)rc));
+ DPRINTM(DPRINT_REACTOS, "RegQueryValue(): rc %d\n", (int)rc);
if (rc != ERROR_SUCCESS) return;
- DbgPrint((DPRINT_REACTOS, "BufferSize: %d \n", (int)BufferSize));
- DbgPrint((DPRINT_REACTOS, "GroupNameBuffer: '%S' \n", GroupNameBuffer));
+ DPRINTM(DPRINT_REACTOS, "BufferSize: %d \n", (int)BufferSize);
+ DPRINTM(DPRINT_REACTOS, "GroupNameBuffer: '%S' \n", GroupNameBuffer);
/* Loop through each group */
GroupName = GroupNameBuffer;
while (*GroupName) {
- DbgPrint((DPRINT_REACTOS, "Driver group: '%S'\n", GroupName));
+ DPRINTM(DPRINT_REACTOS, "Driver group: '%S'\n", GroupName);
/* Query the Order */
BufferSize = sizeof(OrderList);
/* Get the Driver's Name */
ValueSize = sizeof(ServiceName);
rc = RegEnumKey(hServiceKey, Index, ServiceName, &ValueSize);
- DbgPrint((DPRINT_REACTOS, "RegEnumKey(): rc %d\n", (int)rc));
+ DPRINTM(DPRINT_REACTOS, "RegEnumKey(): rc %d\n", (int)rc);
/* Makre sure it's valid, and check if we're done */
if (rc == ERROR_NO_MORE_ITEMS) break;
if (rc != ERROR_SUCCESS) return;
- DbgPrint((DPRINT_REACTOS, "Service %d: '%S'\n", (int)Index, ServiceName));
+ DPRINTM(DPRINT_REACTOS, "Service %d: '%S'\n", (int)Index, ServiceName);
/* open driver Key */
rc = RegOpenKey(hServiceKey, ServiceName, &hDriverKey);
if (rc == ERROR_SUCCESS)
- {
+ {
/* Read the Start Value */
ValueSize = sizeof(ULONG);
rc = RegQueryValue(hDriverKey, L"Start", &ValueType, (PUCHAR)&StartValue, &ValueSize);
if (rc != ERROR_SUCCESS) StartValue = (ULONG)-1;
- DbgPrint((DPRINT_REACTOS, " Start: %x \n", (int)StartValue));
+ DPRINTM(DPRINT_REACTOS, " Start: %x \n", (int)StartValue);
/* Read the Tag */
ValueSize = sizeof(ULONG);
rc = RegQueryValue(hDriverKey, L"Tag", &ValueType, (PUCHAR)&TagValue, &ValueSize);
if (rc != ERROR_SUCCESS) TagValue = (ULONG)-1;
- DbgPrint((DPRINT_REACTOS, " Tag: %x \n", (int)TagValue));
+ DPRINTM(DPRINT_REACTOS, " Tag: %x \n", (int)TagValue);
/* Read the driver's group */
DriverGroupSize = sizeof(DriverGroup);
rc = RegQueryValue(hDriverKey, L"Group", NULL, (PUCHAR)DriverGroup, &DriverGroupSize);
- DbgPrint((DPRINT_REACTOS, " Group: '%S' \n", DriverGroup));
+ DPRINTM(DPRINT_REACTOS, " Group: '%S' \n", DriverGroup);
/* Make sure it should be started */
if ((StartValue == 0) &&
/* Write the whole path if it suceeded, else prepare to fail */
if (rc != ERROR_SUCCESS) {
- DbgPrint((DPRINT_REACTOS, " ImagePath: not found\n"));
+ DPRINTM(DPRINT_REACTOS, " ImagePath: not found\n");
sprintf(ImagePath, "%s\\system32\\drivers\\%S.sys", szSystemRoot, ServiceName);
} else if (TempImagePath[0] != L'\\') {
sprintf(ImagePath, "%s%S", szSystemRoot, TempImagePath);
} else {
sprintf(ImagePath, "%S", TempImagePath);
- DbgPrint((DPRINT_REACTOS, " ImagePath: '%s'\n", ImagePath));
+ DPRINTM(DPRINT_REACTOS, " ImagePath: '%s'\n", ImagePath);
}
- DbgPrint((DPRINT_REACTOS, " Loading driver: '%s'\n", ImagePath));
+ DPRINTM(DPRINT_REACTOS, " Loading driver: '%s'\n", ImagePath);
/* Update the position if needed */
if (nPos < 100) nPos += 5;
} else {
- DbgPrint((DPRINT_REACTOS, " Skipping driver '%S' with Start %d, Tag %d and Group '%S' (Current Tag %d, current group '%S')\n",
- ServiceName, StartValue, TagValue, DriverGroup, OrderList[TagIndex], GroupName));
+ DPRINTM(DPRINT_REACTOS, " Skipping driver '%S' with Start %d, Tag %d and Group '%S' (Current Tag %d, current group '%S')\n",
+ ServiceName, StartValue, TagValue, DriverGroup, OrderList[TagIndex], GroupName);
}
}
ValueSize = sizeof(ServiceName);
rc = RegEnumKey(hServiceKey, Index, ServiceName, &ValueSize);
- DbgPrint((DPRINT_REACTOS, "RegEnumKey(): rc %d\n", (int)rc));
+ DPRINTM(DPRINT_REACTOS, "RegEnumKey(): rc %d\n", (int)rc);
if (rc == ERROR_NO_MORE_ITEMS) break;
if (rc != ERROR_SUCCESS) return;
- DbgPrint((DPRINT_REACTOS, "Service %d: '%S'\n", (int)Index, ServiceName));
+ DPRINTM(DPRINT_REACTOS, "Service %d: '%S'\n", (int)Index, ServiceName);
/* open driver Key */
rc = RegOpenKey(hServiceKey, ServiceName, &hDriverKey);
ValueSize = sizeof(ULONG);
rc = RegQueryValue(hDriverKey, L"Start", &ValueType, (PUCHAR)&StartValue, &ValueSize);
if (rc != ERROR_SUCCESS) StartValue = (ULONG)-1;
- DbgPrint((DPRINT_REACTOS, " Start: %x \n", (int)StartValue));
+ DPRINTM(DPRINT_REACTOS, " Start: %x \n", (int)StartValue);
/* Read the Tag */
ValueSize = sizeof(ULONG);
rc = RegQueryValue(hDriverKey, L"Tag", &ValueType, (PUCHAR)&TagValue, &ValueSize);
if (rc != ERROR_SUCCESS) TagValue = (ULONG)-1;
- DbgPrint((DPRINT_REACTOS, " Tag: %x \n", (int)TagValue));
+ DPRINTM(DPRINT_REACTOS, " Tag: %x \n", (int)TagValue);
/* Read the driver's group */
DriverGroupSize = sizeof(DriverGroup);
rc = RegQueryValue(hDriverKey, L"Group", NULL, (PUCHAR)DriverGroup, &DriverGroupSize);
- DbgPrint((DPRINT_REACTOS, " Group: '%S' \n", DriverGroup));
+ DPRINTM(DPRINT_REACTOS, " Group: '%S' \n", DriverGroup);
for (TagIndex = 1; TagIndex <= OrderList[0]; TagIndex++) {
if (TagValue == OrderList[TagIndex]) break;
ValueSize = sizeof(TempImagePath);
rc = RegQueryValue(hDriverKey, L"ImagePath", NULL, (PUCHAR)TempImagePath, &ValueSize);
if (rc != ERROR_SUCCESS) {
- DbgPrint((DPRINT_REACTOS, " ImagePath: not found\n"));
+ DPRINTM(DPRINT_REACTOS, " ImagePath: not found\n");
sprintf(ImagePath, "%ssystem32\\drivers\\%S.sys", szSystemRoot, ServiceName);
} else if (TempImagePath[0] != L'\\') {
sprintf(ImagePath, "%s%S", szSystemRoot, TempImagePath);
} else {
sprintf(ImagePath, "%S", TempImagePath);
- DbgPrint((DPRINT_REACTOS, " ImagePath: '%s'\n", ImagePath));
+ DPRINTM(DPRINT_REACTOS, " ImagePath: '%s'\n", ImagePath);
}
- DbgPrint((DPRINT_REACTOS, " Loading driver: '%s'\n", ImagePath));
+ DPRINTM(DPRINT_REACTOS, " Loading driver: '%s'\n", ImagePath);
if (nPos < 100) nPos += 5;
} else {
- DbgPrint((DPRINT_REACTOS, " Skipping driver '%S' with Start %d, Tag %d and Group '%S' (Current group '%S')\n",
- ServiceName, StartValue, TagValue, DriverGroup, GroupName));
+ DPRINTM(DPRINT_REACTOS, " Skipping driver '%S' with Start %d, Tag %d and Group '%S' (Current group '%S')\n",
+ ServiceName, StartValue, TagValue, DriverGroup, GroupName);
}
}
VOID
LoadAndBootReactOS(PCSTR OperatingSystemName)
{
- PFILE FilePointer;
- CHAR name[255];
- CHAR value[255];
- CHAR SystemPath[255];
- CHAR szKernelName[255];
- CHAR szFileName[255];
- CHAR MsgBuffer[256];
- ULONG_PTR SectionId;
+ PFILE FilePointer;
+ CHAR name[255];
+ CHAR value[255];
+ CHAR SystemPath[255];
+ CHAR LivePath[255];
+ CHAR szKernelName[255];
+ CHAR szFileName[255];
+ CHAR MsgBuffer[256];
+ ULONG_PTR SectionId;
PIMAGE_NT_HEADERS NtHeader;
PVOID LoadBase;
- ULONG_PTR Base;
- ULONG Size;
+ ULONG_PTR Base;
+ ULONG Size;
//
// Backdrop
//
UiDrawBackdrop();
- //
- // Open the operating system section
- // specified in the .ini file
- //
- if (!IniOpenSection(OperatingSystemName, &SectionId))
- {
- sprintf(MsgBuffer,"Operating System section '%s' not found in freeldr.ini", OperatingSystemName);
- UiMessageBox(MsgBuffer);
- return;
- }
+ //
+ // Open the operating system section
+ // specified in the .ini file
+ //
+ if (!IniOpenSection(OperatingSystemName, &SectionId))
+ {
+ sprintf(MsgBuffer,"Operating System section '%s' not found in freeldr.ini", OperatingSystemName);
+ UiMessageBox(MsgBuffer);
+ return;
+ }
//
// Read the command line
//
- 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
//
//
RamDiskLoadVirtualFile(szFileName);
}
- }
+ }
- /*
- * Setup multiboot information structure
- */
+ /*
+ * Setup multiboot information structure
+ */
UiDrawProgressBarCenter(1, 100, szLoadingMsg);
- UiDrawStatusText("Detecting Hardware...");
- LoaderBlock.CommandLine = reactos_kernel_cmdline;
- LoaderBlock.PageDirectoryStart = (ULONG_PTR)&PageDirectoryStart;
- LoaderBlock.PageDirectoryEnd = (ULONG_PTR)&PageDirectoryEnd;
- LoaderBlock.ModsCount = 0;
- LoaderBlock.ModsAddr = reactos_modules;
+ UiDrawStatusText("Detecting Hardware...");
+ LoaderBlock.CommandLine = reactos_kernel_cmdline;
+ LoaderBlock.PageDirectoryStart = (ULONG_PTR)&PageDirectoryStart;
+ LoaderBlock.PageDirectoryEnd = (ULONG_PTR)&PageDirectoryEnd;
+ LoaderBlock.ModsCount = 0;
+ LoaderBlock.ModsAddr = reactos_modules;
LoaderBlock.DrivesAddr = reactos_arc_disk_info;
LoaderBlock.RdAddr = (ULONG_PTR)gRamDiskBase;
LoaderBlock.RdLength = gRamDiskSize;
- LoaderBlock.MmapLength = (SIZE_T)MachGetMemoryMap((PBIOS_MEMORY_MAP)reactos_memory_map, 32) * sizeof(memory_map_t);
+ LoaderBlock.MmapLength = (SIZE_T)MachVtbl.GetMemoryMap((PBIOS_MEMORY_MAP)reactos_memory_map, 32) * sizeof(memory_map_t);
if (LoaderBlock.MmapLength)
{
ULONG i;
}
}
- /*
- * Initialize the registry
- */
- RegInitializeRegistry();
+ /*
+ * Initialize the registry
+ */
+ RegInitializeRegistry();
- /*
- * Make sure the system path is set in the .ini file
- */
- if (!IniReadSettingByName(SectionId, "SystemPath", SystemPath, sizeof(SystemPath)))
- {
- UiMessageBox("System path not specified for selected operating system.");
- return;
- }
+ /*
+ * Make sure the system path is set in the .ini file
+ */
+ if (!IniReadSettingByName(SectionId, "SystemPath", SystemPath, sizeof(SystemPath)))
+ {
+ UiMessageBox("System path not specified for selected operating system.");
+ return;
+ }
- /*
- * Special case for Live CD.
- */
- if (!_stricmp(SystemPath, "LiveCD"))
- {
- /* Normalize */
- MachDiskGetBootPath(SystemPath, sizeof(SystemPath));
- strcat(SystemPath, "\\reactos");
- strcat(strcpy(reactos_kernel_cmdline, SystemPath),
- " /MININT");
- }
- else
- {
- if (! MachDiskNormalizeSystemPath(SystemPath,
- sizeof(SystemPath)))
- {
- UiMessageBox("Invalid system path");
- return;
- }
- /* copy system path into kernel command line */
- strcpy(reactos_kernel_cmdline, SystemPath);
- }
+ /*
+ * Special case for Live CD.
+ */
+ if (!_strnicmp(SystemPath, "LiveCD", strlen("LiveCD")))
+ {
+ /* Use everything following the "LiveCD" string as the path */
+ strcpy(LivePath, SystemPath + strlen("LiveCD"));
+ /* Normalize */
+ MachDiskGetBootPath(SystemPath, sizeof(SystemPath));
+ strcat(SystemPath, LivePath);
+ strcat(strcpy(reactos_kernel_cmdline, SystemPath),
+ " /MININT");
+ }
+ else
+ {
+ /* copy system path into kernel command line */
+ strcpy(reactos_kernel_cmdline, SystemPath);
+ }
- /*
- * Read the optional kernel parameters (if any)
- */
- if (IniReadSettingByName(SectionId, "Options", value, sizeof(value)))
- {
- strcat(reactos_kernel_cmdline, " ");
- strcat(reactos_kernel_cmdline, value);
- }
+ /*
+ * Read the optional kernel parameters (if any)
+ */
+ if (IniReadSettingByName(SectionId, "Options", value, sizeof(value)))
+ {
+ strcat(reactos_kernel_cmdline, " ");
+ strcat(reactos_kernel_cmdline, value);
+ }
- /*
- * Detect hardware
- */
- LoaderBlock.ArchExtra = (ULONG_PTR)MachHwDetect();
+ /*
+ * Detect hardware
+ */
+ LoaderBlock.ArchExtra = (ULONG_PTR)MachHwDetect();
UiDrawProgressBarCenter(5, 100, szLoadingMsg);
LoaderBlock.DrivesCount = reactos_disk_count;
- UiDrawStatusText("Loading...");
-
- //
- // If we have a ramdisk, this will switch to the ramdisk disk routines
- // which read from memory instead of using the firmware. This has to be done
- // after hardware detection, since hardware detection will require using the
- // real routines in order to perform disk-detection (just because we're on a
- // ram-boot doesn't mean the user doesn't have actual disks installed too!)
- //
- RamDiskSwitchFromBios();
+ UiDrawStatusText("Loading...");
- /*
- * Try to open system drive
- */
- if (!FsOpenSystemVolume(SystemPath, szBootPath, &LoaderBlock.BootDevice))
- {
- UiMessageBox("Failed to open system drive.");
- return;
- }
+ /* Get boot path */
+ if (strchr(SystemPath, '\\') != NULL)
+ strcpy(szBootPath, strchr(SystemPath, '\\'));
+ else
+ szBootPath[0] = '\0';
- /* append a backslash */
- if ((strlen(szBootPath)==0) ||
- szBootPath[strlen(szBootPath)] != '\\')
- strcat(szBootPath, "\\");
+ /* append a backslash */
+ if ((strlen(szBootPath)==0) ||
+ szBootPath[strlen(szBootPath)] != '\\')
+ strcat(szBootPath, "\\");
- DbgPrint((DPRINT_REACTOS,"SystemRoot: '%s'\n", szBootPath));
+ DPRINTM(DPRINT_REACTOS,"SystemRoot: '%s'\n", szBootPath);
strcpy(SystemRoot, szBootPath);
- /*
- * Find the kernel image name
- * and try to load the kernel off the disk
- */
- if(IniReadSettingByName(SectionId, "Kernel", value, sizeof(value)))
- {
- /*
- * Set the name and
- */
- if (value[0] == '\\')
- {
- strcpy(szKernelName, value);
- }
- else
- {
- strcpy(szKernelName, szBootPath);
- strcat(szKernelName, "SYSTEM32\\");
- strcat(szKernelName, value);
- }
- }
- else
- {
- strcpy(value, "NTOSKRNL.EXE");
- strcpy(szKernelName, szBootPath);
- strcat(szKernelName, "SYSTEM32\\");
- strcat(szKernelName, value);
- }
+ /*
+ * Find the kernel image name
+ * and try to load the kernel off the disk
+ */
+ if(IniReadSettingByName(SectionId, "Kernel", value, sizeof(value)))
+ {
+ /*
+ * Set the name and
+ */
+ if (value[0] == '\\')
+ {
+ strcpy(szKernelName, value);
+ }
+ else
+ {
+ strcpy(szKernelName, szBootPath);
+ strcat(szKernelName, "SYSTEM32\\");
+ strcat(szKernelName, value);
+ }
+ }
+ else
+ {
+ strcpy(value, "NTOSKRNL.EXE");
+ strcpy(szKernelName, szBootPath);
+ strcat(szKernelName, "SYSTEM32\\");
+ strcat(szKernelName, value);
+ }
- /*
- * Find the HAL image name
- * and try to load the kernel off the disk
- */
- if(IniReadSettingByName(SectionId, "Hal", value, sizeof(value)))
- {
- /*
- * Set the name and
- */
- if (value[0] == '\\')
- {
- strcpy(szHalName, value);
- }
- else
- {
- strcpy(szHalName, szBootPath);
- strcat(szHalName, "SYSTEM32\\");
- strcat(szHalName, value);
- }
- }
- else
- {
- strcpy(value, "HAL.DLL");
- strcpy(szHalName, szBootPath);
- strcat(szHalName, "SYSTEM32\\");
- strcat(szHalName, value);
- }
+ /*
+ * Find the HAL image name
+ * and try to load the kernel off the disk
+ */
+ if(IniReadSettingByName(SectionId, "Hal", value, sizeof(value)))
+ {
+ /*
+ * Set the name and
+ */
+ if (value[0] == '\\')
+ {
+ strcpy(szHalName, value);
+ }
+ else
+ {
+ strcpy(szHalName, szBootPath);
+ strcat(szHalName, "SYSTEM32\\");
+ strcat(szHalName, value);
+ }
+ }
+ else
+ {
+ strcpy(value, "HAL.DLL");
+ strcpy(szHalName, szBootPath);
+ strcat(szHalName, "SYSTEM32\\");
+ strcat(szHalName, value);
+ }
- /* Load the kernel */
- LoadBase = FrLdrLoadImage(szKernelName, 5, 1);
- if (!LoadBase) return;
+ /* Load the kernel */
+ LoadBase = FrLdrLoadImage(szKernelName, 5, 1);
+ if (!LoadBase) return;
- /* Get the NT header, kernel base and kernel entry */
- NtHeader = RtlImageNtHeader(LoadBase);
- KernelBase = SWAPD(NtHeader->OptionalHeader.ImageBase);
- KernelEntryPoint = (ROS_KERNEL_ENTRY_POINT)(KernelBase + SWAPD(NtHeader->OptionalHeader.AddressOfEntryPoint));
- LoaderBlock.KernelBase = KernelBase;
+ /* Get the NT header, kernel base and kernel entry */
+ NtHeader = RtlImageNtHeader(LoadBase);
+ KernelBase = SWAPD(NtHeader->OptionalHeader.ImageBase);
+ KernelEntryPoint = (ROS_KERNEL_ENTRY_POINT)(KernelBase + SWAPD(NtHeader->OptionalHeader.AddressOfEntryPoint));
+ LoaderBlock.KernelBase = KernelBase;
- /*
- * Load the System hive from disk
- */
- strcpy(szFileName, szBootPath);
- strcat(szFileName, "SYSTEM32\\CONFIG\\SYSTEM");
+ /*
+ * Load the System hive from disk
+ */
+ strcpy(szFileName, szBootPath);
+ strcat(szFileName, "SYSTEM32\\CONFIG\\SYSTEM");
- DbgPrint((DPRINT_REACTOS, "SystemHive: '%s'", szFileName));
+ DPRINTM(DPRINT_REACTOS, "SystemHive: '%s'", szFileName);
- FilePointer = FsOpenFile(szFileName);
- if (FilePointer == NULL)
- {
- UiMessageBox("Could not find the System hive!");
- return;
- }
+ FilePointer = FsOpenFile(szFileName);
+ if (!FilePointer)
+ {
+ UiMessageBox("Could not find the System hive!");
+ return;
+ }
- /*
- * Update the status bar with the current file
- */
- strcpy(name, "Reading ");
- strcat(name, value);
- while (strlen(name) < 80)
- strcat(name, " ");
- UiDrawStatusText(name);
+ /*
+ * Update the status bar with the current file
+ */
+ strcpy(name, "Reading ");
+ strcat(name, value);
+ while (strlen(name) < 80)
+ strcat(name, " ");
+ UiDrawStatusText(name);
/*
* Load the System hive
UiMessageBox("Could not load the System hive!\n");
return;
}
- DbgPrint((DPRINT_REACTOS, "SystemHive loaded at 0x%x size %u", (unsigned)Base, (unsigned)Size));
+ DPRINTM(DPRINT_REACTOS, "SystemHive loaded at 0x%x size %u\n", (unsigned)Base, (unsigned)Size);
- /*
- * Import the loaded system hive
- */
- RegImportBinaryHive((PCHAR)Base, Size);
+ /*
+ * Import the loaded system hive
+ */
+ RegImportBinaryHive((PCHAR)Base, Size);
- /*
- * Initialize the 'CurrentControlSet' link
- */
- RegInitCurrentControlSet(FALSE);
+ /*
+ * Initialize the 'CurrentControlSet' link
+ */
+ RegInitCurrentControlSet(FALSE);
- UiDrawProgressBarCenter(15, 100, szLoadingMsg);
+ UiDrawProgressBarCenter(15, 100, szLoadingMsg);
- UiDrawProgressBarCenter(20, 100, szLoadingMsg);
+ UiDrawProgressBarCenter(20, 100, szLoadingMsg);
- /*
- * Load NLS files
- */
- if (!FrLdrLoadNlsFiles(szBootPath, MsgBuffer))
- {
- UiMessageBox(MsgBuffer);
- return;
- }
- UiDrawProgressBarCenter(30, 100, szLoadingMsg);
+ /*
+ * Load NLS files
+ */
+ if (!FrLdrLoadNlsFiles(szBootPath, MsgBuffer))
+ {
+ UiMessageBox(MsgBuffer);
+ return;
+ }
+ UiDrawProgressBarCenter(30, 100, szLoadingMsg);
- /*
- * Load boot drivers
- */
- FrLdrLoadBootDrivers(szBootPath, 40);
- //UiUnInitialize("Booting ReactOS...");
+ /*
+ * Load boot drivers
+ */
+ FrLdrLoadBootDrivers(szBootPath, 40);
+ UiDrawProgressBarCenter(100, 100, szLoadingMsg);
+ //UiUnInitialize("Booting ReactOS...");
//
// Perform architecture-specific pre-boot configuration
//
// Setup paging and jump to kernel
//
- FrLdrStartup(0x2badb002);
-}
-
-#undef DbgPrint
-ULONG
-DbgPrint(const char *Format, ...)
-{
- va_list ap;
- CHAR Buffer[512];
- ULONG Length;
-
- va_start(ap, Format);
-
- /* Construct a string */
- Length = _vsnprintf(Buffer, 512, Format, ap);
-
- /* Check if we went past the buffer */
- if (Length == -1)
- {
- /* Terminate it if we went over-board */
- Buffer[sizeof(Buffer) - 1] = '\n';
-
- /* Put maximum */
- Length = sizeof(Buffer);
- }
-
- /* Show it as a message box */
- UiMessageBox(Buffer);
-
- /* Cleanup and exit */
- va_end(ap);
- return 0;
+ FrLdrStartup(0x2badb002);
}
+#endif
/* EOF */