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);
549 WinLdrIsPaeSupported(
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",
static BOOLEAN WinLdrLoadDeviceDriver(PLIST_ENTRY LoadOrderListHead, PCSTR BootPath, PUNICODE_STRING FilePath, ULONG Flags, PLDR_DATA_TABLE_ENTRY *DriverDTE)
VOID UiUpdateProgressBar(_In_ ULONG Percentage, _In_opt_ PCSTR ProgressText)
VOID AppendBootTimeOptions(PCHAR BootOptions)
BOOLEAN PeLdrScanImportDescriptorTable(IN OUT PLIST_ENTRY ModuleListHead, IN PCCH DirectoryPath, IN PLDR_DATA_TABLE_ENTRY ScanDTE)
NTSTRSAFEAPI RtlStringCbCopyNA(_Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc, _In_ size_t cbToCopy)
ARC_STATUS RamDiskInitialize(IN BOOLEAN InitRamDisk, IN PCSTR LoadOptions OPTIONAL, IN PCSTR DefaultPath OPTIONAL)
VOID(NTAPI * KERNEL_ENTRY_POINT)(PLOADER_PARAMETER_BLOCK LoaderBlock)
BOOLEAN PeLdrLoadImage(IN PCHAR FileName, IN TYPE_OF_MEMORY MemoryType, OUT PVOID *ImageBasePA)
BOOT_DRIVER_LIST_ENTRY ListEntry
ARC_DISK_INFORMATION ArcDiskInformation
BOOLEAN WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock, PCSTR BootPath)
ARC_DISK_SIGNATURE_EX reactos_arc_disk_info[]
VOID WinLdrpDumpArcDisks(PLOADER_PARAMETER_BLOCK LoaderBlock)
#define _WIN32_WINNT_WS03
VOID UiSetProgressBarSubset(_In_ ULONG Floor, _In_ ULONG Ceiling)
ACPI_SIZE strlen(const char *String)
VOID WinLdrSetProcessorContext(void)
VOID List_PaToVa(_In_ LIST_ENTRY *ListEntry)
BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR SystemRoot)
char * strstr(char *String1, char *String2)
_Check_return_ _CRTIMP size_t __cdecl strcspn(_In_z_ const char *_Str, _In_z_ const char *_Control)
PLOADER_PARAMETER_EXTENSION Extension
PCONFIGURATION_COMPONENT_DATA ConfigurationRoot
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)
BOOLEAN WinLdrTerminalConnected
IN PVOID IN PVOID IN USHORT IN USHORT Size
HEADLESS_LOADER_BLOCK LoaderRedirectionInformation
_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 WinLdrInitErrataInf(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN USHORT OperatingSystemVersion, IN PCSTR SystemRoot)
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
static const WCHAR Description[]
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
#define InsertTailList(ListHead, Entry)
static VOID NTAPI NtLdrImportDllLoadCallback(_In_ PCSTR FileName)
static int Link(const char **args)
BOOLEAN WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock)
_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
CHAR ArcBootDeviceName[MAX_PATH+1]
enum _TYPE_OF_MEMORY TYPE_OF_MEMORY
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define _WIN32_WINNT_VISTA
#define _WIN32_WINNT_WIN2K
VOID DumpMemoryAllocMap(VOID)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
HKEY CurrentControlSetKey
struct _SETUP_LOADER_BLOCK * SetupLdrBlock
ARC_STATUS LoadAndBootWindows(IN ULONG Argc, IN PCHAR Argv[], IN PCHAR Envp[])
DBG_DEFAULT_CHANNEL(WINDOWS)
VOID UiMessageBox(PCSTR Format,...)
VOID UiDrawProgressBarCenter(_In_ PCSTR ProgressText)
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
ARC_STATUS LoadAndBootWindowsCommon(IN USHORT OperatingSystemVersion, IN PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR BootOptions, IN PCSTR BootPath)
_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
USHORT WinLdrDetectVersion(VOID)
#define _Inout_updates_bytes_(size)
VOID WinLdrpDumpBootDriver(PLOADER_PARAMETER_BLOCK LoaderBlock)
LOADER_PARAMETER_BLOCK LoaderBlock
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
VOID UiIndicateProgress(VOID)
struct _LIST_ENTRY * Flink
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_ ULONG Flags
static const WCHAR SystemRoot[]
VOID NtLdrOutputLoadMsg(_In_ PCSTR FileName, _In_opt_ PCSTR Description)
NLS_DATA_BLOCK NlsDataBlock
PELDR_IMPORTDLL_LOAD_CALLBACK PeLdrImportDllLoadCallback
PARC_DISK_INFORMATION ArcDiskInformation
LIST_ENTRY BootDriverListHead
#define _strnicmp(_String1, _String2, _MaxCount)
ARC_DISK_SIGNATURE DiskSignature
static PPARTENTRY SystemPartition
ARC_STATUS ArcRead(ULONG FileId, VOID *Buffer, ULONG N, ULONG *Count)
CHAR LoadOptions[MAX_OPTIONS_LENGTH+1]
VOID UiDrawStatusText(PCSTR StatusText)
PVOID MmAllocateMemoryWithType(SIZE_T MemorySize, TYPE_OF_MEMORY MemoryType)
VOID UiSetProgressBarText(_In_ PCSTR ProgressText)
#define KI_USER_SHARED_DATA
#define MachPrepareForReactOS()
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
CHAR NtHalPathName[MAX_PATH+1]
VOID UiDrawBackdrop(VOID)
VOID WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ HANDLE _In_ ULONG FileNameLength
LIST_ENTRY LoadOrderListHead
LOADER_PARAMETER_EXTENSION Extension
VOID AllocateAndInitLPB(IN USHORT VersionToBoot, OUT PLOADER_PARAMETER_BLOCK *OutLoaderBlock)
VOID MmFreeMemory(PVOID MemoryPointer)
VOID WinLdrSetupEms(IN PCSTR BootOptions)
struct _FileName FileName
PCSTR NtLdrGetOption(IN PCSTR Options, IN PCSTR OptionName)
UNICODE_STRING RegistryPath
PRTL_UNICODE_STRING_BUFFER Path
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
struct _LDR_DATA_TABLE_ENTRY * LdrEntry
VOID WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, PCSTR Options, PCSTR SystemRoot, PCSTR BootPath, USHORT VersionToBoot)
_CRTIMP char *__cdecl _strlwr(_Inout_z_ char *_String)
PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size, TYPE_OF_MEMORY MemoryType)
LIST_ENTRY MemoryDescriptorListHead
#define InitializeListHead(ListHead)
VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start)
FORCEINLINE VOID UiResetForSOS(VOID)
ARC_STATUS ArcClose(ULONG FileId)
DECLSPEC_NORETURN VOID NTAPI KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
ARC_STATUS ArcGetFileInformation(ULONG FileId, FILEINFORMATION *Information)
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)
FORCEINLINE PVOID PaToVa(PVOID Pa)
ARC_STATUS ArcOpen(CHAR *Path, OPENMODE OpenMode, ULONG *FileId)
VOID PeLdrFreeDataTableEntry(_In_ PLDR_DATA_TABLE_ENTRY Entry)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
CHAR NtBootPathName[MAX_PATH+1]
PCHAR GetArgumentValue(IN ULONG Argc, IN PCHAR Argv[], IN PCHAR ArgumentName)
BOOLEAN PeLdrCheckForLoadedDll(IN OUT PLIST_ENTRY ModuleListHead, IN PCH DllName, OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry)
BOOLEAN PeLdrAllocateDataTableEntry(IN OUT PLIST_ENTRY ModuleListHead, IN PCCH BaseDllName, IN PCCH FullDllName, IN PVOID BasePA, OUT PLDR_DATA_TABLE_ENTRY *NewEntry)
BOOLEAN WinLdrInitSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, IN PCSTR SystemRoot, IN BOOLEAN Setup)
_Inout_opt_ PUNICODE_STRING Extension
PCSTR NtLdrGetOptionEx(IN PCSTR Options, IN PCSTR OptionName, OUT PULONG OptionLength OPTIONAL)
#define RegCloseKey(hKey)
struct _LOADER_PARAMETER_EXTENSION LOADER_PARAMETER_EXTENSION
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
PLOADER_SYSTEM_BLOCK WinLdrSystemBlock
NTSTRSAFEAPI RtlStringCbCatA(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)