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)
12 /* ENUMERATIONS **************************************************************/
14 /* See https://msdn.microsoft.com/en-us/library/windows/desktop/aa964229(v=vs.85).aspx */
16 #define BCD_CLASS_LIBRARY 0x01
17 #define BCD_CLASS_APPLICATION 0x02
18 #define BCD_CLASS_DEVICE 0x03
19 #define BCD_CLASS_OEM 0x05
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
29 typedef enum BcdLibraryElementTypes
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
;
85 typedef enum BcdOSLoaderElementTypes
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
;
156 typedef enum BcdBootMgrElementTypes
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
;
174 /* DATA STRUCTURES ***********************************************************/
190 typedef struct _BCD_ELEMENT_HEADER
195 } BCD_ELEMENT_HEADER
, *PBCD_ELEMENT_HEADER
;
197 typedef struct _BCD_PACKED_ELEMENT
199 struct _BCD_PACKED_ELEMENT
* NextEntry
;
200 BcdElementType RootType
;
202 UCHAR Data
[ANYSIZE_ARRAY
];
203 } BCD_PACKED_ELEMENT
, *PBCD_PACKED_ELEMENT
;
205 typedef struct _BCD_ELEMENT
207 PBCD_ELEMENT_HEADER Header
;
209 } BCD_ELEMENT
, *PBCD_ELEMENT
;
211 typedef struct _BCD_DEVICE_OPTION
213 GUID AssociatedEntry
;
214 BL_DEVICE_DESCRIPTOR DeviceDescriptor
;
215 } BCD_DEVICE_OPTION
, *PBCD_DEVICE_OPTION
;
217 /* FUNCTIONS ******************************************************************/
220 BcdOpenStoreFromFile (
221 _In_ PUNICODE_STRING FileName
,
222 _In_ PHANDLE StoreHandle
225 #define BCD_ENUMERATE_FLAG_DEEP 0x04
226 #define BCD_ENUMERATE_FLAG_DEVICES 0x08
227 #define BCD_ENUMERATE_FLAG_IN_ORDER 0x10
230 BiEnumerateElements (
231 _In_ HANDLE BcdHandle
,
232 _In_ HANDLE ObjectHandle
,
233 _In_ ULONG RootElementType
,
235 _Out_opt_ PBCD_PACKED_ELEMENT Elements
,
236 _Inout_ PULONG ElementSize
,
237 _Out_ PULONG ElementCountNe
242 _In_ HANDLE BcdHandle
,
244 _Out_ PHANDLE ObjectHandle
248 BcdEnumerateAndUnpackElements (
249 _In_ HANDLE BcdHandle
,
250 _In_ HANDLE ObjectHandle
,
251 _Out_opt_ PBCD_ELEMENT Elements
,
252 _Inout_ PULONG ElementSize
,
253 _Out_ PULONG ElementCount