[BOOTLIB]: Add very early work around font loading.
[reactos.git] / reactos / boot / environ / include / bcd.h
1 /*
2 * COPYRIGHT: See COPYING.ARM in the top level directory
3 * PROJECT: ReactOS Boot Configuration Data
4 * FILE: boot/environ/include/bcd.h
5 * PURPOSE: BCD Main Header
6 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
7 */
8
9 #ifndef _BCD_H
10 #define _BCD_H
11
12 /* ENUMERATIONS **************************************************************/
13
14 /* See https://msdn.microsoft.com/en-us/library/windows/desktop/aa964229(v=vs.85).aspx */
15
16 #define BCD_CLASS_LIBRARY 0x01
17 #define BCD_CLASS_APPLICATION 0x02
18 #define BCD_CLASS_DEVICE 0x03
19 #define BCD_CLASS_OEM 0x05
20
21 #define BCD_TYPE_DEVICE 0x01
22 #define BCD_TYPE_STRING 0x02
23 #define BCD_TYPE_OBJECT 0x03
24 #define BCD_TYPE_OBJECT_LIST 0x04
25 #define BCD_TYPE_INTEGER 0x05
26 #define BCD_TYPE_BOOLEAN 0x06
27 #define BCD_TYPE_INTEGER_LIST 0x07
28
29 typedef enum BcdLibraryElementTypes
30 {
31 BcdLibraryDevice_ApplicationDevice = 0x11000001,
32 BcdLibraryString_ApplicationPath = 0x12000002,
33 BcdLibraryString_Description = 0x12000004,
34 BcdLibraryString_PreferredLocale = 0x12000005,
35 BcdLibraryObjectList_InheritedObjects = 0x14000006,
36 BcdLibraryInteger_TruncatePhysicalMemory = 0x15000007,
37 BcdLibraryObjectList_RecoverySequence = 0x14000008,
38 BcdLibraryBoolean_AutoRecoveryEnabled = 0x16000009,
39 BcdLibraryIntegerList_BadMemoryList = 0x1700000a,
40 BcdLibraryBoolean_AllowBadMemoryAccess = 0x1600000b,
41 BcdLibraryInteger_FirstMegabytePolicy = 0x1500000c,
42 BcdLibraryInteger_RelocatePhysicalMemory = 0x1500000D,
43 BcdLibraryInteger_AvoidLowPhysicalMemory = 0x1500000E,
44 BcdLibraryBoolean_DebuggerEnabled = 0x16000010,
45 BcdLibraryInteger_DebuggerType = 0x15000011,
46 BcdLibraryInteger_SerialDebuggerPortAddress = 0x15000012,
47 BcdLibraryInteger_SerialDebuggerPort = 0x15000013,
48 BcdLibraryInteger_SerialDebuggerBaudRate = 0x15000014,
49 BcdLibraryInteger_1394DebuggerChannel = 0x15000015,
50 BcdLibraryString_UsbDebuggerTargetName = 0x12000016,
51 BcdLibraryBoolean_DebuggerIgnoreUsermodeExceptions = 0x16000017,
52 BcdLibraryInteger_DebuggerStartPolicy = 0x15000018,
53 BcdLibraryString_DebuggerBusParameters = 0x12000019,
54 BcdLibraryInteger_DebuggerNetHostIP = 0x1500001A,
55 BcdLibraryInteger_DebuggerNetPort = 0x1500001B,
56 BcdLibraryBoolean_DebuggerNetDhcp = 0x1600001C,
57 BcdLibraryString_DebuggerNetKey = 0x1200001D,
58 BcdLibraryBoolean_EmsEnabled = 0x16000020,
59 BcdLibraryInteger_EmsPort = 0x15000022,
60 BcdLibraryInteger_EmsBaudRate = 0x15000023,
61 BcdLibraryString_LoadOptionsString = 0x12000030,
62 BcdLibraryBoolean_DisplayAdvancedOptions = 0x16000040,
63 BcdLibraryBoolean_DisplayOptionsEdit = 0x16000041,
64 BcdLibraryDevice_BsdLogDevice = 0x11000043,
65 BcdLibraryString_BsdLogPath = 0x12000044,
66 BcdLibraryBoolean_PreserveBsdLog = 0x16000045, /* Undocumented */
67 BcdLibraryBoolean_GraphicsModeDisabled = 0x16000046,
68 BcdLibraryInteger_ConfigAccessPolicy = 0x15000047,
69 BcdLibraryBoolean_DisableIntegrityChecks = 0x16000048,
70 BcdLibraryBoolean_AllowPrereleaseSignatures = 0x16000049,
71 BcdLibraryString_FontPath = 0x1200004A,
72 BcdLibraryInteger_SiPolicy = 0x1500004B,
73 BcdLibraryInteger_FveBandId = 0x1500004C,
74 BcdLibraryBoolean_ConsoleExtendedInput = 0x16000050,
75 BcdLibraryInteger_GraphicsResolution = 0x15000052,
76 BcdLibraryBoolean_RestartOnFailure = 0x16000053,
77 BcdLibraryBoolean_GraphicsForceHighestMode = 0x16000054,
78 BcdLibraryBoolean_IsolatedExecutionContext = 0x16000060,
79 BcdLibraryBoolean_BootUxDisable = 0x1600006C,
80 BcdLibraryBoolean_BootShutdownDisabled = 0x16000074,
81 BcdLibraryIntegerList_AllowedInMemorySettings = 0x17000077,
82 BcdLibraryBoolean_ForceFipsCrypto = 0x16000079
83 } BcdLibraryElementTypes;
84
85 typedef enum BcdOSLoaderElementTypes
86 {
87 BcdOSLoaderDevice_OSDevice = 0x21000001,
88 BcdOSLoaderString_SystemRoot = 0x22000002,
89 BcdOSLoaderObject_AssociatedResumeObject = 0x23000003,
90 BcdOSLoaderBoolean_DetectKernelAndHal = 0x26000010,
91 BcdOSLoaderString_KernelPath = 0x22000011,
92 BcdOSLoaderString_HalPath = 0x22000012,
93 BcdOSLoaderString_DbgTransportPath = 0x22000013,
94 BcdOSLoaderInteger_NxPolicy = 0x25000020,
95 BcdOSLoaderInteger_PAEPolicy = 0x25000021,
96 BcdOSLoaderBoolean_WinPEMode = 0x26000022,
97 BcdOSLoaderBoolean_DisableCrashAutoReboot = 0x26000024,
98 BcdOSLoaderBoolean_UseLastGoodSettings = 0x26000025,
99 BcdOSLoaderBoolean_AllowPrereleaseSignatures = 0x26000027,
100 BcdOSLoaderBoolean_NoLowMemory = 0x26000030,
101 BcdOSLoaderInteger_RemoveMemory = 0x25000031,
102 BcdOSLoaderInteger_IncreaseUserVa = 0x25000032,
103 BcdOSLoaderBoolean_UseVgaDriver = 0x26000040,
104 BcdOSLoaderBoolean_DisableBootDisplay = 0x26000041,
105 BcdOSLoaderBoolean_DisableVesaBios = 0x26000042,
106 BcdOSLoaderBoolean_DisableVgaMode = 0x26000043,
107 BcdOSLoaderInteger_ClusterModeAddressing = 0x25000050,
108 BcdOSLoaderBoolean_UsePhysicalDestination = 0x26000051,
109 BcdOSLoaderInteger_RestrictApicCluster = 0x25000052,
110 BcdOSLoaderBoolean_UseLegacyApicMode = 0x26000054,
111 BcdOSLoaderInteger_X2ApicPolicy = 0x25000055,
112 BcdOSLoaderBoolean_UseBootProcessorOnly = 0x26000060,
113 BcdOSLoaderInteger_NumberOfProcessors = 0x25000061,
114 BcdOSLoaderBoolean_ForceMaximumProcessors = 0x26000062,
115 BcdOSLoaderBoolean_ProcessorConfigurationFlags = 0x25000063,
116 BcdOSLoaderBoolean_MaximizeGroupsCreated = 0x26000064,
117 BcdOSLoaderBoolean_ForceGroupAwareness = 0x26000065,
118 BcdOSLoaderInteger_GroupSize = 0x25000066,
119 BcdOSLoaderInteger_UseFirmwarePciSettings = 0x26000070,
120 BcdOSLoaderInteger_MsiPolicy = 0x25000071,
121 BcdOSLoaderInteger_SafeBoot = 0x25000080,
122 BcdOSLoaderBoolean_SafeBootAlternateShell = 0x26000081,
123 BcdOSLoaderBoolean_BootLogInitialization = 0x26000090,
124 BcdOSLoaderBoolean_VerboseObjectLoadMode = 0x26000091,
125 BcdOSLoaderBoolean_KernelDebuggerEnabled = 0x260000a0,
126 BcdOSLoaderBoolean_DebuggerHalBreakpoint = 0x260000a1,
127 BcdOSLoaderBoolean_UsePlatformClock = 0x260000A2,
128 BcdOSLoaderBoolean_ForceLegacyPlatform = 0x260000A3,
129 BcdOSLoaderInteger_TscSyncPolicy = 0x250000A6,
130 BcdOSLoaderBoolean_EmsEnabled = 0x260000b0,
131 BcdOSLoaderInteger_DriverLoadFailurePolicy = 0x250000c1,
132 BcdOSLoaderInteger_BootMenuPolicy = 0x250000C2,
133 BcdOSLoaderBoolean_AdvancedOptionsOneTime = 0x260000C3,
134 BcdOSLoaderInteger_BootStatusPolicy = 0x250000E0,
135 BcdOSLoaderBoolean_DisableElamDrivers = 0x260000E1,
136 BcdOSLoaderInteger_HypervisorLaunchType = 0x250000F0,
137 BcdOSLoaderBoolean_HypervisorDebuggerEnabled = 0x260000F2,
138 BcdOSLoaderInteger_HypervisorDebuggerType = 0x250000F3,
139 BcdOSLoaderInteger_HypervisorDebuggerPortNumber = 0x250000F4,
140 BcdOSLoaderInteger_HypervisorDebuggerBaudrate = 0x250000F5,
141 BcdOSLoaderInteger_HypervisorDebugger1394Channel = 0x250000F6,
142 BcdOSLoaderInteger_BootUxPolicy = 0x250000F7,
143 BcdOSLoaderString_HypervisorDebuggerBusParams = 0x220000F9,
144 BcdOSLoaderInteger_HypervisorNumProc = 0x250000FA,
145 BcdOSLoaderInteger_HypervisorRootProcPerNode = 0x250000FB,
146 BcdOSLoaderBoolean_HypervisorUseLargeVTlb = 0x260000FC,
147 BcdOSLoaderInteger_HypervisorDebuggerNetHostIp = 0x250000FD,
148 BcdOSLoaderInteger_HypervisorDebuggerNetHostPort = 0x250000FE,
149 BcdOSLoaderInteger_TpmBootEntropyPolicy = 0x25000100,
150 BcdOSLoaderString_HypervisorDebuggerNetKey = 0x22000110,
151 BcdOSLoaderBoolean_HypervisorDebuggerNetDhcp = 0x26000114,
152 BcdOSLoaderInteger_HypervisorIommuPolicy = 0x25000115,
153 BcdOSLoaderInteger_XSaveDisable = 0x2500012b
154 } BcdOSLoaderElementTypes;
155
156 typedef enum BcdBootMgrElementTypes
157 {
158 BcdBootMgrObjectList_DisplayOrder = 0x24000001,
159 BcdBootMgrObjectList_BootSequence = 0x24000002,
160 BcdBootMgrObject_DefaultObject = 0x23000003,
161 BcdBootMgrInteger_Timeout = 0x25000004,
162 BcdBootMgrBoolean_AttemptResume = 0x26000005,
163 BcdBootMgrObject_ResumeObject = 0x23000006,
164 BcdBootMgrObjectList_ToolsDisplayOrder = 0x24000010,
165 BcdBootMgrBoolean_DisplayBootMenu = 0x26000020,
166 BcdBootMgrBoolean_NoErrorDisplay = 0x26000021,
167 BcdBootMgrDevice_BcdDevice = 0x21000022,
168 BcdBootMgrString_BcdFilePath = 0x22000023,
169 BcdBootMgrBoolean_ProcessCustomActionsFirst = 0x26000028,
170 BcdBootMgrIntegerList_CustomActionsList = 0x27000030,
171 BcdBootMgrBoolean_PersistBootSequence = 0x26000031
172 } BcdBootMgrElementTypes;
173
174 /* DATA STRUCTURES ***********************************************************/
175
176 typedef struct
177 {
178 union
179 {
180 ULONG PackedValue;
181 struct
182 {
183 ULONG SubType : 24;
184 ULONG Format : 4;
185 ULONG Class : 4;
186 };
187 };
188 } BcdElementType;
189
190 typedef struct _BCD_ELEMENT_HEADER
191 {
192 ULONG Version;
193 ULONG Type;
194 ULONG Size;
195 } BCD_ELEMENT_HEADER, *PBCD_ELEMENT_HEADER;
196
197 typedef struct _BCD_PACKED_ELEMENT
198 {
199 struct _BCD_PACKED_ELEMENT* NextEntry;
200 BcdElementType RootType;
201 BCD_ELEMENT_HEADER;
202 UCHAR Data[ANYSIZE_ARRAY];
203 } BCD_PACKED_ELEMENT, *PBCD_PACKED_ELEMENT;
204
205 typedef struct _BCD_ELEMENT
206 {
207 PBCD_ELEMENT_HEADER Header;
208 PUCHAR Body;
209 } BCD_ELEMENT, *PBCD_ELEMENT;
210
211 typedef struct _BCD_DEVICE_OPTION
212 {
213 GUID AssociatedEntry;
214 BL_DEVICE_DESCRIPTOR DeviceDescriptor;
215 } BCD_DEVICE_OPTION, *PBCD_DEVICE_OPTION;
216
217 /* FUNCTIONS ******************************************************************/
218
219 NTSTATUS
220 BcdOpenStoreFromFile (
221 _In_ PUNICODE_STRING FileName,
222 _In_ PHANDLE StoreHandle
223 );
224
225 #define BCD_ENUMERATE_FLAG_DEEP 0x04
226 #define BCD_ENUMERATE_FLAG_DEVICES 0x08
227 #define BCD_ENUMERATE_FLAG_IN_ORDER 0x10
228
229 NTSTATUS
230 BiEnumerateElements (
231 _In_ HANDLE BcdHandle,
232 _In_ HANDLE ObjectHandle,
233 _In_ ULONG RootElementType,
234 _In_ ULONG Flags,
235 _Out_opt_ PBCD_PACKED_ELEMENT Elements,
236 _Inout_ PULONG ElementSize,
237 _Out_ PULONG ElementCountNe
238 );
239
240 NTSTATUS
241 BcdOpenObject (
242 _In_ HANDLE BcdHandle,
243 _In_ PGUID ObjectId,
244 _Out_ PHANDLE ObjectHandle
245 );
246
247 NTSTATUS
248 BcdEnumerateAndUnpackElements (
249 _In_ HANDLE BcdHandle,
250 _In_ HANDLE ObjectHandle,
251 _Out_opt_ PBCD_ELEMENT Elements,
252 _Inout_ PULONG ElementSize,
253 _Out_ PULONG ElementCount
254 );
255
256 #endif