66 CHAR ProgressString[256];
91 UiMessageBox(
"Failed to allocate memory for system block!");
104 Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
105 Extension->MinorVersion = (VersionToBoot & 0xFF);
112 *OutLoaderBlock = LoaderBlock;
131 PSTR LoadOptions, NewLoadOptions;
132 CHAR HalPath[] =
"\\";
140 PathSeparator =
strstr(BootPath,
"\\") - BootPath;
143 TRACE(
"ArcBoot: '%s'\n", ArcBoot);
189 while (*LoadOptions ==
'/')
192 *NewLoadOptions++ = *LoadOptions;
193 }
while (*LoadOptions++);
210 ERR(
"Failed to allocate ARC structure! Ignoring remaining ARC disks. (i = %lu, DiskCount = %lu)\n",
271 RtlStringCbCatA(MiscFiles,
sizeof(MiscFiles),
"AppPatch\\drvmain.sdb");
279 TRACE(
"WinLdrInitializePhase1() completed\n");
290 CHAR DriverPath[1024];
298 DriverNamePos =
strrchr(DriverPath,
'\\');
299 if (DriverNamePos !=
NULL)
314 TRACE(
"DriverPath: '%s', DllName: '%s', LPB\n", DriverPath, DllName);
331 ERR(
"PeLdrLoadImage('%s') failed\n", DllName);
340 ERR(
"PeLdrAllocateDataTableEntry('%s') failed\n", DllName);
346 (*DriverDTE)->Flags |=
Flags;
354 ERR(
"PeLdrScanImportDescriptorTable('%s') failed\n", FullPath);
385 TRACE(
"BootDriver %wZ DTE %08X RegPath: %wZ\n",
412 ERR(
"Cannot load boot driver '%wZ'!\n", &BootDriver->
FilePath);
460 if (PhysicalBase ==
NULL)
512 CHAR ProgressString[256];
525 ERR(
"PeLdrLoadImage('%s') failed\n",
File);
538 ERR(
"PeLdrAllocateDataTableEntry('%s') failed\n", FullFileName);
580 TRACE(
"PaeEnabled %X, PaeDisabled %X\n", PaeEnabled, PaeDisabled);
619 if (!KernelDTE)
return FALSE;
632 FIXME(
"LoadWindowsCore: 3GB - TRUE (not implemented)\n");
643 FIXME(
"LoadWindowsCore: SAFEBOOT - TRUE (not implemented)\n");
651 FIXME(
"LoadWindowsCore: BOOTLOGO - TRUE (not implemented)\n");
657 !LoaderBlock->SetupLdrBlock)
707 if (Option && (OptionLength > 4))
710 Option += 4; OptionLength -= 4;
716 if (Option && (OptionLength > 7))
719 Option += 7; OptionLength -= 7;
726 PaeModeOn = WinLdrIsPaeSupported(OperatingSystemVersion,
731 sizeof(KernelFileName));
732 if (PaeModeOn)
FIXME(
"WinLdrIsPaeSupported: PaeModeOn\n");
735 TRACE(
"HAL file = '%s' ; Kernel file = '%s'\n", HalFileName, KernelFileName);
750 ERR(
"LoadModule('%s') failed\n", KernelFileName);
756 HalBase =
LoadModule(LoaderBlock, DirPath, HalFileName,
760 ERR(
"LoadModule('%s') failed\n", HalFileName);
791 if (Option && (OptionLength > 10))
794 Option += 10; OptionLength -= 10;
809 if ((OptionLength == 0) ||
810 ( (OptionLength >= 3) && (
_strnicmp(Option,
"COM", 3) == 0) &&
811 ((OptionLength == 3) || (
'0' <= Option[3] && Option[3] <=
'9')) ))
818 IsCustomKdDll =
TRUE;
823 Option =
"COM"; OptionLength = 3;
827 OptionLength, Option);
831 KdDllBase =
LoadModule(LoaderBlock, DirPath, KdDllName,
839 WARN(
"LoadModule('%s') failed\n", KdDllName);
841 IsCustomKdDll =
FALSE;
844 KdDllBase =
LoadModule(LoaderBlock, DirPath, KdDllName,
852 ERR(
"LoadModule('%s') failed\n", KdDllName);
911 WCHAR szFileName[80];
925 WARN(
"Could not open the BiosInfo/Errata registry key (Error %u)\n", (
int)rc);
934 WARN(
"Could not retrieve the InfName value (Error %u)\n", (
int)rc);
950 WARN(
"Could not load '%s'\n", ErrataFilePath);
954 LoaderBlock->Extension->EmInfFileImage =
PaToVa(PhysicalBase);
955 LoaderBlock->Extension->EmInfFileSize =
FileSize;
972 USHORT OperatingSystemVersion;
980 if (!ArgValue || !*ArgValue)
982 ERR(
"No 'BootType' value, aborting!\n");
987 if (
_stricmp(ArgValue,
"Windows") == 0 ||
988 _stricmp(ArgValue,
"Windows2003") == 0)
992 else if (
_stricmp(ArgValue,
"WindowsNT40") == 0)
998 ERR(
"Unknown 'BootType' value '%s', aborting!\n", ArgValue);
1006 ERR(
"No 'SystemPartition' specified, aborting!\n");
1044 if (!*BootPath || BootPath[
strlen(BootPath) - 1] !=
'\\')
1047 TRACE(
"BootPath: '%s'\n", BootPath);
1052 if (ArgValue && *ArgValue)
1071 if (ArgValue && *ArgValue)
1084 if (ArgValue && *ArgValue)
1119 TRACE(
"SYSTEM hive %s\n", (
Success ?
"loaded" :
"not loaded"));
1125 if (OperatingSystemVersion == 0)
1132 TRACE(
"SYSTEM hive %s\n", (
Success ?
"scanned" :
"not scanned"));
1139 TRACE(
"Firmware Errata file %s\n", (
Success ?
"loaded" :
"not loaded"));
1162 TRACE(
"LoadAndBootWindowsCommon()\n");
1164 ASSERT(OperatingSystemVersion != 0);
1209 TRACE(
"Boot drivers loading %s\n",
Success ?
"successful" :
"failed");
1221 OperatingSystemVersion);
1227 LoaderBlockVA =
PaToVa(LoaderBlock);
1247 TRACE(
"Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n",
1260 (*KiSystemStartup)(LoaderBlockVA);
1296 TRACE(
"BootDriver %wZ DTE %08X RegPath: %wZ\n", &BootDriver->
FilePath,
1315 TRACE(
"ArcDisk %s checksum: 0x%X, signature: 0x%X\n",
PRTL_UNICODE_STRING_BUFFER Path
char * strstr(char *String1, char *String2)
ACPI_SIZE strlen(const char *String)
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
VOID WinLdrSetProcessorContext(void)
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
PCHAR GetArgumentValue(IN ULONG Argc, IN PCHAR Argv[], IN PCHAR ArgumentName)
ARC_STATUS RamDiskInitialize(IN BOOLEAN InitRamDisk, IN PCSTR LoadOptions OPTIONAL, IN PCSTR DefaultPath OPTIONAL)
#define DBG_DEFAULT_CHANNEL(ch)
ARC_STATUS ArcClose(ULONG FileId)
ARC_STATUS ArcGetFileInformation(ULONG FileId, FILEINFORMATION *Information)
ARC_STATUS ArcOpen(CHAR *Path, OPENMODE OpenMode, ULONG *FileId)
ARC_STATUS ArcRead(ULONG FileId, VOID *Buffer, ULONG N, ULONG *Count)
#define MachPrepareForReactOS()
VOID MmFreeMemory(PVOID MemoryPointer)
PVOID MmAllocateMemoryWithType(SIZE_T MemorySize, TYPE_OF_MEMORY MemoryType)
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
VOID AppendBootTimeOptions(PCHAR BootOptions)
HKEY CurrentControlSetKey
#define RegCloseKey(hKey)
VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start)
FORCEINLINE PVOID PaToVa(PVOID Pa)
static const WCHAR SystemRoot[]
static const WCHAR Description[]
#define _strnicmp(_String1, _String2, _MaxCount)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InitializeListHead(ListHead)
struct _FileName FileName
_Inout_opt_ PUNICODE_STRING Extension
_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 List_PaToVa(_In_ LIST_ENTRY *ListEntry)
#define _Inout_updates_bytes_(size)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
VOID(NTAPI * KERNEL_ENTRY_POINT)(PLOADER_PARAMETER_BLOCK LoaderBlock)
BOOLEAN WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock)
FORCEINLINE VOID UiResetForSOS(VOID)
BOOLEAN WinLdrInitSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR SystemRoot, IN BOOLEAN Setup)
BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR SystemRoot)
PCSTR NtLdrGetOption(IN PCSTR Options, IN PCSTR OptionName)
PCSTR NtLdrGetOptionEx(IN PCSTR Options, IN PCSTR OptionName, OUT PULONG OptionLength OPTIONAL)
DECLSPEC_NORETURN VOID NTAPI KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
NTSTRSAFEAPI RtlStringCbCatA(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
NTSTRSAFEAPI RtlStringCbCopyNA(_Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc, _In_ size_t cbToCopy)
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
BOOLEAN PeLdrScanImportDescriptorTable(IN OUT PLIST_ENTRY ModuleListHead, IN PCCH DirectoryPath, IN PLDR_DATA_TABLE_ENTRY ScanDTE)
VOID PeLdrFreeDataTableEntry(_In_ PLDR_DATA_TABLE_ENTRY Entry)
BOOLEAN PeLdrCheckForLoadedDll(IN OUT PLIST_ENTRY ModuleListHead, IN PCH DllName, OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry)
PELDR_IMPORTDLL_LOAD_CALLBACK PeLdrImportDllLoadCallback
BOOLEAN PeLdrAllocateDataTableEntry(IN OUT PLIST_ENTRY ModuleListHead, IN PCCH BaseDllName, IN PCCH FullDllName, IN PVOID BasePA, OUT PLDR_DATA_TABLE_ENTRY *NewEntry)
BOOLEAN PeLdrLoadImage(_In_ PCSTR FilePath, _In_ TYPE_OF_MEMORY MemoryType, _Out_ PVOID *ImageBasePA)
Loads the specified image from the file.
_CRTIMP char *__cdecl _strlwr(_Inout_z_ char *_String)
_Check_return_ _CRTIMP size_t __cdecl strcspn(_In_z_ const char *_Str, _In_z_ const char *_Control)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
struct _LOADER_PARAMETER_EXTENSION LOADER_PARAMETER_EXTENSION
enum _TYPE_OF_MEMORY TYPE_OF_MEMORY
#define KI_USER_SHARED_DATA
#define _WIN32_WINNT_WS03
#define _WIN32_WINNT_WIN2K
#define _WIN32_WINNT_VISTA
ARC_DISK_SIGNATURE DiskSignature
UNICODE_STRING RegistryPath
struct _LDR_DATA_TABLE_ENTRY * LdrEntry
BOOT_DRIVER_LIST_ENTRY ListEntry
struct _LIST_ENTRY * Flink
LIST_ENTRY BootDriverListHead
PCONFIGURATION_COMPONENT_DATA ConfigurationRoot
LIST_ENTRY LoadOrderListHead
PARC_DISK_INFORMATION ArcDiskInformation
PLOADER_PARAMETER_EXTENSION Extension
LIST_ENTRY MemoryDescriptorListHead
struct _SETUP_LOADER_BLOCK * SetupLdrBlock
CHAR NtHalPathName[MAX_PATH+1]
ARC_DISK_INFORMATION ArcDiskInformation
CHAR NtBootPathName[MAX_PATH+1]
NLS_DATA_BLOCK NlsDataBlock
LOADER_PARAMETER_EXTENSION Extension
CHAR ArcBootDeviceName[MAX_PATH+1]
LOADER_PARAMETER_BLOCK LoaderBlock
CHAR LoadOptions[MAX_OPTIONS_LENGTH+1]
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
VOID UiSetProgressBarText(_In_ PCSTR ProgressText)
VOID UiIndicateProgress(VOID)
VOID UiUpdateProgressBar(_In_ ULONG Percentage, _In_opt_ PCSTR ProgressText)
VOID UiSetProgressBarSubset(_In_ ULONG Floor, _In_ ULONG Ceiling)
VOID UiDrawBackdrop(VOID)
VOID UiDrawProgressBarCenter(_In_ PCSTR ProgressText)
VOID UiDrawStatusText(PCSTR StatusText)
VOID UiMessageBox(PCSTR Format,...)
static PPARTENTRY SystemPartition
static int Link(const char **args)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET _In_opt_ PWDF_MEMORY_DESCRIPTOR MemoryDescriptor
static BOOLEAN LoadWindowsCore(IN USHORT OperatingSystemVersion, IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR BootOptions, IN PCSTR BootPath, IN OUT PLDR_DATA_TABLE_ENTRY *KernelDTE)
ARC_DISK_SIGNATURE_EX reactos_arc_disk_info[]
BOOLEAN WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock, PCSTR BootPath)
VOID WinLdrpDumpArcDisks(PLOADER_PARAMETER_BLOCK LoaderBlock)
ARC_STATUS LoadAndBootWindows(IN ULONG Argc, IN PCHAR Argv[], IN PCHAR Envp[])
VOID WinLdrSetupEms(IN PCSTR BootOptions)
VOID WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, PCSTR Options, PCSTR SystemRoot, PCSTR BootPath, USHORT VersionToBoot)
VOID WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock)
VOID WinLdrpDumpBootDriver(PLOADER_PARAMETER_BLOCK LoaderBlock)
VOID NtLdrOutputLoadMsg(_In_ PCSTR FileName, _In_opt_ PCSTR Description)
ARC_STATUS LoadAndBootWindowsCommon(IN USHORT OperatingSystemVersion, IN PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR BootOptions, IN PCSTR BootPath)
PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size, TYPE_OF_MEMORY MemoryType)
USHORT WinLdrDetectVersion(VOID)
static BOOLEAN WinLdrLoadDeviceDriver(PLIST_ENTRY LoadOrderListHead, PCSTR BootPath, PUNICODE_STRING FilePath, ULONG Flags, PLDR_DATA_TABLE_ENTRY *DriverDTE)
static BOOLEAN WinLdrInitErrataInf(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN USHORT OperatingSystemVersion, IN PCSTR SystemRoot)
HEADLESS_LOADER_BLOCK LoaderRedirectionInformation
VOID DumpMemoryAllocMap(VOID)
static PVOID LoadModule(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCCH Path, IN PCCH File, IN PCCH ImportName, IN TYPE_OF_MEMORY MemoryType, OUT PLDR_DATA_TABLE_ENTRY *Dte, IN ULONG Percentage)
PLOADER_SYSTEM_BLOCK WinLdrSystemBlock
static VOID NTAPI NtLdrImportDllLoadCallback(_In_ PCSTR FileName)
VOID AllocateAndInitLPB(IN USHORT VersionToBoot, OUT PLOADER_PARAMETER_BLOCK *OutLoaderBlock)
BOOLEAN WinLdrTerminalConnected
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags