xref: /reactos/boot/freeldr/freeldr/ntldr/winldr.h (revision 84344399)
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_PERFORMANCE_DATA LoaderPerformanceData;
62 } LOADER_SYSTEM_BLOCK, *PLOADER_SYSTEM_BLOCK;
63 
64 extern PLOADER_SYSTEM_BLOCK WinLdrSystemBlock;
65 /**/extern PCWSTR BootFileSystem;/**/
66 
67 
68 // conversion.c
69 #if 0
70 PVOID VaToPa(PVOID Va);
71 PVOID PaToVa(PVOID Pa);
72 VOID List_PaToVa(_In_ LIST_ENTRY *ListEntry);
73 #endif
74 VOID ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start);
75 
76 // winldr.c
77 extern BOOLEAN SosEnabled;
78 #ifdef _M_IX86
79 extern BOOLEAN PaeModeOn;
80 #endif
81 
82 FORCEINLINE
83 VOID
84 UiResetForSOS(VOID)
85 {
86 #ifdef _M_ARM
87     /* Re-initialize the UI */
88     UiInitialize(TRUE);
89 #else
90     /* Reset the UI and switch to MiniTui */
91     UiVtbl.UnInitialize();
92     UiVtbl = MiniTuiVtbl;
93     UiVtbl.Initialize();
94 #endif
95     /* Disable the progress bar */
96     UiProgressBar.Show = FALSE;
97 }
98 
99 VOID
100 NtLdrOutputLoadMsg(
101     _In_ PCSTR FileName,
102     _In_opt_ PCSTR Description);
103 
104 PVOID WinLdrLoadModule(PCSTR ModuleName, PULONG Size,
105                        TYPE_OF_MEMORY MemoryType);
106 
107 // wlmemory.c
108 BOOLEAN
109 WinLdrSetupMemoryLayout(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock);
110 
111 // wlregistry.c
112 BOOLEAN
113 WinLdrInitSystemHive(
114     IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
115     IN PCSTR SystemRoot,
116     IN BOOLEAN Setup);
117 
118 BOOLEAN WinLdrScanSystemHive(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
119                              IN PCSTR SystemRoot);
120 
121 BOOLEAN
122 WinLdrLoadNLSData(
123     _Inout_ PLOADER_PARAMETER_BLOCK LoaderBlock,
124     _In_ PCSTR DirectoryPath,
125     _In_ PCUNICODE_STRING AnsiFileName,
126     _In_ PCUNICODE_STRING OemFileName,
127     _In_ PCUNICODE_STRING LangFileName, // CaseTable
128     _In_ PCUNICODE_STRING OemHalFileName);
129 
130 BOOLEAN
131 WinLdrAddDriverToList(
132     _Inout_ PLIST_ENTRY DriverListHead,
133     _In_ BOOLEAN InsertAtHead,
134     _In_ PCWSTR DriverName,
135     _In_opt_ PCWSTR ImagePath,
136     _In_opt_ PCWSTR GroupName,
137     _In_ ULONG ErrorControl,
138     _In_ ULONG Tag);
139 
140 // winldr.c
141 VOID
142 WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
143                        PCSTR Options,
144                        PCSTR SystemPath,
145                        PCSTR BootPath,
146                        USHORT VersionToBoot);
147 
148 VOID
149 WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock);
150 
151 VOID
152 WinLdrpDumpBootDriver(PLOADER_PARAMETER_BLOCK LoaderBlock);
153 
154 VOID
155 WinLdrpDumpArcDisks(PLOADER_PARAMETER_BLOCK LoaderBlock);
156 
157 ARC_STATUS
158 LoadAndBootWindowsCommon(
159     IN USHORT OperatingSystemVersion,
160     IN PLOADER_PARAMETER_BLOCK LoaderBlock,
161     IN PCSTR BootOptions,
162     IN PCSTR BootPath);
163 
164 VOID
165 WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock);
166 
167 VOID
168 WinLdrSetProcessorContext(
169     _In_ USHORT OperatingSystemVersion);
170 
171 // arch/xxx/winldr.c
172 BOOLEAN
173 MempSetupPaging(IN PFN_NUMBER StartPage,
174                 IN PFN_NUMBER NumberOfPages,
175                 IN BOOLEAN KernelMapping);
176 
177 VOID
178 MempUnmapPage(PFN_NUMBER Page);
179 
180 VOID
181 MempDump(VOID);
182