1 /* 2 * PROJECT: FreeLoader 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Windows-compatible NT OS Loader. 5 * COPYRIGHT: Copyright 2006-2019 Aleksey Bragin <aleksey@reactos.org> 6 */ 7 8 #pragma once 9 10 #include <arc/setupblk.h> 11 12 /* Entry-point to kernel */ 13 typedef VOID (NTAPI *KERNEL_ENTRY_POINT) (PLOADER_PARAMETER_BLOCK LoaderBlock); 14 15 /* Descriptors */ 16 #define NUM_GDT 128 // Must be 128 17 #define NUM_IDT 0x100 // Only 16 are used though. Must be 0x100 18 19 #if 0 20 21 #include <pshpack1.h> 22 typedef struct /* Root System Descriptor Pointer */ 23 { 24 CHAR signature [8]; /* contains "RSD PTR " */ 25 UCHAR checksum; /* to make sum of struct == 0 */ 26 CHAR oem_id [6]; /* OEM identification */ 27 UCHAR revision; /* Must be 0 for 1.0, 2 for 2.0 */ 28 ULONG rsdt_physical_address; /* 32-bit physical address of RSDT */ 29 ULONG length; /* XSDT Length in bytes including hdr */ 30 ULONGLONG xsdt_physical_address; /* 64-bit physical address of XSDT */ 31 UCHAR extended_checksum; /* Checksum of entire table */ 32 CHAR reserved [3]; /* reserved field must be 0 */ 33 } RSDP_DESCRIPTOR, *PRSDP_DESCRIPTOR; 34 #include <poppack.h> 35 36 typedef struct _ARC_DISK_SIGNATURE_EX 37 { 38 ARC_DISK_SIGNATURE DiskSignature; 39 CHAR ArcName[MAX_PATH]; 40 } ARC_DISK_SIGNATURE_EX, *PARC_DISK_SIGNATURE_EX; 41 42 #endif 43 44 #define MAX_OPTIONS_LENGTH 255 45 46 typedef struct _LOADER_SYSTEM_BLOCK 47 { 48 LOADER_PARAMETER_BLOCK LoaderBlock; 49 LOADER_PARAMETER_EXTENSION Extension; 50 SETUP_LOADER_BLOCK SetupBlock; 51 #ifdef _M_IX86 52 HEADLESS_LOADER_BLOCK HeadlessLoaderBlock; 53 #endif 54 NLS_DATA_BLOCK NlsDataBlock; 55 CHAR LoadOptions[MAX_OPTIONS_LENGTH+1]; 56 CHAR ArcBootDeviceName[MAX_PATH+1]; 57 // CHAR ArcHalDeviceName[MAX_PATH]; 58 CHAR NtBootPathName[MAX_PATH+1]; 59 CHAR NtHalPathName[MAX_PATH+1]; 60 ARC_DISK_INFORMATION ArcDiskInformation; 61 } LOADER_SYSTEM_BLOCK, *PLOADER_SYSTEM_BLOCK; 62 63 extern PLOADER_SYSTEM_BLOCK WinLdrSystemBlock; 64 /**/extern PCWSTR BootFileSystem;/**/ 65 66 67 // conversion.c 68 #if 0 69 PVOID VaToPa(PVOID Va); 70 PVOID PaToVa(PVOID Pa); 71 VOID List_PaToVa(_In_ LIST_ENTRY *ListEntry); 72 #endif 73 VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start); 74 75 // winldr.c 76 extern BOOLEAN SosEnabled; 77 #ifdef _M_IX86 78 extern BOOLEAN PaeModeOn; 79 #endif 80 81 FORCEINLINE 82 VOID 83 UiResetForSOS(VOID) 84 { 85 #ifdef _M_ARM 86 /* Re-initialize the UI */ 87 UiInitialize(TRUE); 88 #else 89 /* Reset the UI and switch to MiniTui */ 90 UiVtbl.UnInitialize(); 91 UiVtbl = MiniTuiVtbl; 92 UiVtbl.Initialize(); 93 #endif 94 /* Disable the progress bar */ 95 UiProgressBar.Show = FALSE; 96 } 97 98 VOID 99 NtLdrOutputLoadMsg( 100 _In_ PCSTR FileName, 101 _In_opt_ PCSTR Description); 102 103 PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size, 104 TYPE_OF_MEMORY MemoryType); 105 106 // wlmemory.c 107 BOOLEAN 108 WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock); 109 110 // wlregistry.c 111 BOOLEAN 112 WinLdrInitSystemHive( 113 IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, 114 IN PCSTR SystemRoot, 115 IN BOOLEAN Setup); 116 117 BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, 118 IN PCSTR SystemRoot); 119 120 BOOLEAN 121 WinLdrLoadNLSData( 122 _Inout_ PLOADER_PARAMETER_BLOCK LoaderBlock, 123 _In_ PCSTR DirectoryPath, 124 _In_ PCUNICODE_STRING AnsiFileName, 125 _In_ PCUNICODE_STRING OemFileName, 126 _In_ PCUNICODE_STRING LangFileName, // CaseTable 127 _In_ PCUNICODE_STRING OemHalFileName); 128 129 BOOLEAN 130 WinLdrAddDriverToList( 131 _Inout_ PLIST_ENTRY DriverListHead, 132 _In_ BOOLEAN InsertAtHead, 133 _In_ PCWSTR DriverName, 134 _In_opt_ PCWSTR ImagePath, 135 _In_opt_ PCWSTR GroupName, 136 _In_ ULONG ErrorControl, 137 _In_ ULONG Tag); 138 139 // winldr.c 140 VOID 141 WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, 142 PCSTR Options, 143 PCSTR SystemPath, 144 PCSTR BootPath, 145 USHORT VersionToBoot); 146 147 VOID 148 WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock); 149 150 VOID 151 WinLdrpDumpBootDriver(PLOADER_PARAMETER_BLOCK LoaderBlock); 152 153 VOID 154 WinLdrpDumpArcDisks(PLOADER_PARAMETER_BLOCK LoaderBlock); 155 156 ARC_STATUS 157 LoadAndBootWindowsCommon( 158 IN USHORT OperatingSystemVersion, 159 IN PLOADER_PARAMETER_BLOCK LoaderBlock, 160 IN PCSTR BootOptions, 161 IN PCSTR BootPath); 162 163 VOID 164 WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock); 165 166 VOID 167 WinLdrSetProcessorContext(VOID); 168 169 // arch/xxx/winldr.c 170 BOOLEAN 171 MempSetupPaging(IN PFN_NUMBER StartPage, 172 IN PFN_NUMBER NumberOfPages, 173 IN BOOLEAN KernelMapping); 174 175 VOID 176 MempUnmapPage(PFN_NUMBER Page); 177 178 VOID 179 MempDump(VOID); 180