46 UiMessageBox(
"Failed to allocate memory for system block!");
59 Extension->MajorVersion = (VersionToBoot & 0xFF00) >> 8;
60 Extension->MinorVersion = (VersionToBoot & 0xFF);
67 *OutLoaderBlock = LoaderBlock;
86 PSTR LoadOptions, NewLoadOptions;
87 CHAR HalPath[] =
"\\";
95 PathSeparator =
strstr(BootPath,
"\\") - BootPath;
98 TRACE(
"ArcBoot: '%s'\n", ArcBoot);
144 while (*LoadOptions ==
'/')
147 *NewLoadOptions++ = *LoadOptions;
148 }
while (*LoadOptions++);
220 RtlStringCbCatA(MiscFiles,
sizeof(MiscFiles),
"AppPatch\\drvmain.sdb");
228 TRACE(
"WinLdrInitializePhase1() completed\n");
239 CHAR DriverPath[1024];
247 DriverNamePos =
strrchr(DriverPath,
'\\');
248 if (DriverNamePos !=
NULL)
263 TRACE(
"DriverPath: '%s', DllName: '%s', LPB\n", DriverPath, DllName);
283 ERR(
"PeLdrAllocateDataTableEntry() failed\n");
288 (*DriverDTE)->Flags |=
Flags;
295 ERR(
"PeLdrScanImportDescriptorTable() failed for %s\n", FullPath);
318 TRACE(
"BootDriver %wZ DTE %08X RegPath: %wZ\n", &BootDriver->
FilePath,
340 ERR(
"Can't load boot driver '%wZ'!\n", &BootDriver->
FilePath);
397 if (PhysicalBase ==
NULL)
425 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server",
450 CHAR ProgressString[256];
498 if (!KernelDTE)
return FALSE;
555 TRACE(
"HAL file = '%s' ; Kernel file = '%s'\n", HalFileName, KernelFileName);
633 RtlStringCbCatA(KdTransportDllName,
sizeof(KdTransportDllName),
"COM");
637 RtlStringCbCatA(KdTransportDllName,
sizeof(KdTransportDllName),
".DLL");
671 WCHAR szFileName[80];
678 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Errata",
684 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\BiosInfo",
689 WARN(
"Could not open the BiosInfo/Errata registry key (Error %u)\n", (
int)rc);
698 WARN(
"Could not retrieve the InfName value (Error %u)\n", (
int)rc);
711 WARN(
"Could not load '%s'\n", ErrataFilePath);
715 LoaderBlock->Extension->EmInfFileImage =
PaToVa(PhysicalBase);
716 LoaderBlock->Extension->EmInfFileSize =
FileSize;
732 USHORT OperatingSystemVersion;
740 if (!ArgValue || !*ArgValue)
742 ERR(
"No 'BootType' value, aborting!\n");
747 if (
_stricmp(ArgValue,
"Windows") == 0 ||
748 _stricmp(ArgValue,
"Windows2003") == 0)
752 else if (
_stricmp(ArgValue,
"WindowsNT40") == 0)
758 ERR(
"Unknown 'BootType' value '%s', aborting!\n", ArgValue);
766 ERR(
"No 'SystemPartition' specified, aborting!\n");
802 if (!*BootPath || BootPath[
strlen(BootPath) - 1] !=
'\\')
805 TRACE(
"BootPath: '%s'\n", BootPath);
810 if (ArgValue && *ArgValue)
829 if (ArgValue && *ArgValue)
842 if (ArgValue && *ArgValue)
876 TRACE(
"SYSTEM hive %s\n", (
Success ?
"loaded" :
"not loaded"));
882 if (OperatingSystemVersion == 0)
889 TRACE(
"SYSTEM hive %s\n", (
Success ?
"scanned" :
"not scanned"));
896 TRACE(
"Firmware Errata file %s\n", (
Success ?
"loaded" :
"not loaded"));
909 USHORT OperatingSystemVersion,
921 TRACE(
"LoadAndBootWindowsCommon()\n");
923 ASSERT(OperatingSystemVersion != 0);
954 TRACE(
"Boot drivers loading %s\n",
Success ?
"successful" :
"failed");
964 OperatingSystemVersion);
968 LoaderBlockVA =
PaToVa(LoaderBlock);
988 TRACE(
"Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n",
1001 (*KiSystemStartup)(LoaderBlockVA);
1036 TRACE(
"BootDriver %wZ DTE %08X RegPath: %wZ\n", &BootDriver->
FilePath,
1055 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 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)
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
VOID(NTAPI * KERNEL_ENTRY_POINT)(PLOADER_PARAMETER_BLOCK LoaderBlock)
BOOLEAN PeLdrLoadImage(IN PCHAR FileName, IN TYPE_OF_MEMORY MemoryType, OUT PVOID *ImageBasePA)
_Out_ PNDIS_BUFFER _In_ NDIS_HANDLE _In_ PVOID MemoryDescriptor
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)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE ACPI_HANDLE ACPI_HANDLE *OutHandle ACPI_HANDLE *OutHandle void *Context void *Context ACPI_EVENT_HANDLER Handler UINT32 UINT32 ACPI_GPE_HANDLER void *Context UINT32 ACPI_NOTIFY_HANDLER void *Context ACPI_ADR_SPACE_TYPE ACPI_ADR_SPACE_HANDLER ACPI_ADR_SPACE_SETUP Setup
#define _WIN32_WINNT_WS03
ACPI_SIZE strlen(const char *String)
char * strpbrk(const char *String, const char *Delimiters)
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
_Check_return_ _CRTIMP size_t __cdecl strspn(_In_z_ const char *_Str, _In_z_ const char *_Control)
HEADLESS_LOADER_BLOCK LoaderRedirectionInformation
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
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
NTSTRSAFEAPI RtlStringCbCatNA(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_reads_bytes_(cbToAppend) STRSAFE_LPCSTR pszSrc, _In_ size_t cbToAppend)
#define InsertTailList(ListHead, Entry)
enum OPTION_FLAGS Options
static int Link(const char **args)
void WinLdrSetupEms(IN PCHAR BootOptions)
BOOLEAN WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock)
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)
_Must_inspect_result_ _In_ ULONG Flags
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
#define _WIN32_WINNT_VISTA
#define _WIN32_WINNT_WIN2K
VOID DumpMemoryAllocMap(VOID)
struct _SETUP_LOADER_BLOCK * SetupLdrBlock
ARC_STATUS LoadAndBootWindows(IN ULONG Argc, IN PCHAR Argv[], IN PCHAR Envp[])
DBG_DEFAULT_CHANNEL(WINDOWS)
INIT_FUNCTION VOID NTAPI KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
_Check_return_ _CRTIMP int __cdecl _strnicmp(_In_reads_or_z_(_MaxCount) const char *_Str1, _In_reads_or_z_(_MaxCount) const char *_Str2, _In_ size_t _MaxCount)
_In_opt_ PVOID _In_ PCSTR File
VOID UiMessageBox(PCSTR Format,...)
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
USHORT WinLdrDetectVersion(VOID)
VOID WinLdrpDumpBootDriver(PLOADER_PARAMETER_BLOCK LoaderBlock)
LOADER_PARAMETER_BLOCK LoaderBlock
ULONG_PTR LoaderPagesSpanned
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,...)
struct _LIST_ENTRY * Flink
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
static const WCHAR SystemRoot[]
NLS_DATA_BLOCK NlsDataBlock
PARC_DISK_INFORMATION ArcDiskInformation
LIST_ENTRY BootDriverListHead
ARC_DISK_SIGNATURE DiskSignature
static PPARTENTRY SystemPartition
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
ARC_STATUS ArcRead(ULONG FileId, VOID *Buffer, ULONG N, ULONG *Count)
CHAR LoadOptions[MAX_OPTIONS_LENGTH+1]
PVOID MmAllocateMemoryWithType(SIZE_T MemorySize, TYPE_OF_MEMORY MemoryType)
#define KI_USER_SHARED_DATA
#define MachPrepareForReactOS()
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
CHAR NtHalPathName[MAX_PATH+1]
IN PVOID IN PVOID IN USHORT IN USHORT Size
VOID UiDrawBackdrop(VOID)
VOID WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock)
LIST_ENTRY LoadOrderListHead
LOADER_PARAMETER_EXTENSION Extension
VOID AllocateAndInitLPB(IN USHORT VersionToBoot, OUT PLOADER_PARAMETER_BLOCK *OutLoaderBlock)
static BOOLEAN 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)
UNICODE_STRING RegistryPath
PRTL_UNICODE_STRING_BUFFER Path
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
struct _LDR_DATA_TABLE_ENTRY * LdrEntry
VOID WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, PCSTR Options, PCSTR SystemRoot, PCSTR BootPath, USHORT VersionToBoot)
PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size, TYPE_OF_MEMORY MemoryType)
LIST_ENTRY MemoryDescriptorListHead
#define InitializeListHead(ListHead)
ARC_STATUS LoadAndBootWindowsCommon(USHORT OperatingSystemVersion, PLOADER_PARAMETER_BLOCK LoaderBlock, PCSTR BootOptions, PCSTR BootPath, BOOLEAN Setup)
VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start)
ARC_STATUS ArcClose(ULONG FileId)
ARC_STATUS ArcGetFileInformation(ULONG FileId, FILEINFORMATION *Information)
FORCEINLINE PVOID PaToVa(PVOID Pa)
ARC_STATUS ArcOpen(CHAR *Path, OPENMODE OpenMode, ULONG *FileId)
#define RtlZeroMemory(Destination, 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
_Must_inspect_result_ _In_ PFILE_OBJECT _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ FLT_IO_OPERATION_FLAGS _Out_opt_ PULONG BytesRead
struct _LOADER_PARAMETER_EXTENSION LOADER_PARAMETER_EXTENSION
VOID UiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText)
PLOADER_SYSTEM_BLOCK WinLdrSystemBlock
NTSTRSAFEAPI RtlStringCbCatA(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)