2 * COPYRIGHT: See COPYING.ARM in the top level directory
3 * PROJECT: ReactOS UEFI Boot Library
4 * FILE: boot/environ/include/bl.h
5 * PURPOSE: Main Boot Library Header
6 * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
12 /* INCLUDES ******************************************************************/
25 /* NT SafeInt Header */
26 #include <ntintsafe.h>
32 #include <drivers/acpi/acpi.h>
36 #include <DevicePath.h>
37 #include <LoadedImage.h>
38 #include <GraphicsOutput.h>
42 #include <GlobalVariable.h>
44 /* Registry Headers */
48 /* DEFINES *******************************************************************/
50 DEFINE_GUID(BadMemoryGuid
, 0x54B8275B, 0xD431, 0x473F, 0xAC, 0xFB, 0xE5, 0x36, 0xA0, 0x84, 0x94, 0xA3);
52 #define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
54 #define BL_APP_ENTRY_SIGNATURE "BTAPENT"
56 #define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
57 #define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
59 #define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
60 #define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
62 #define BOOT_APPLICATION_VERSION 2
63 #define BL_MEMORY_DATA_VERSION 1
64 #define BL_RETURN_ARGUMENTS_VERSION 1
65 #define BL_FIRMWARE_DESCRIPTOR_VERSION 2
67 #define BL_RETURN_ARGUMENTS_NO_PAE_FLAG 0x40
69 #define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
70 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
71 #define BL_APPLICATION_ENTRY_WINLOAD 0x04
72 #define BL_APPLICATION_ENTRY_STARTUP 0x08
73 #define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
74 #define BL_APPLICATION_ENTRY_NTLDR 0x40
75 #define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
76 #define BL_APPLICATION_ENTRY_WINRESUME 0x100
77 #define BL_APPLICATION_ENTRY_SETUPLDR 0x200
78 #define BL_APPLICATION_ENTRY_BOOTSECTOR 0x400
79 #define BL_APPLICATION_ENTRY_BOOTMGR 0x1000
80 #define BL_APPLICATION_ENTRY_DISPLAY_ORDER 0x800000
81 #define BL_APPLICATION_ENTRY_FIXED_SEQUENCE 0x20000000
82 #define BL_APPLICATION_ENTRY_RECOVERY 0x40000000
84 #define BL_CONTEXT_PAGING_ON 1
85 #define BL_CONTEXT_INTERRUPTS_ON 2
87 #define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
88 #define BL_MM_FLAG_REQUEST_COALESCING 0x02
90 #define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
91 #define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
92 #define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
93 #define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
94 #define BL_MM_ADD_DESCRIPTOR_ALLOCATE_FLAG 0x1000
95 #define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
97 #define BL_MM_INCLUDE_MAPPED_ALLOCATED 0x01
98 #define BL_MM_INCLUDE_MAPPED_UNALLOCATED 0x02
99 #define BL_MM_INCLUDE_UNMAPPED_ALLOCATED 0x04
100 #define BL_MM_INCLUDE_UNMAPPED_UNALLOCATED 0x08
101 #define BL_MM_INCLUDE_RESERVED_ALLOCATED 0x10
102 #define BL_MM_INCLUDE_BAD_MEMORY 0x20
103 #define BL_MM_INCLUDE_FIRMWARE_MEMORY 0x40
104 #define BL_MM_INCLUDE_TRUNCATED_MEMORY 0x80
105 #define BL_MM_INCLUDE_PERSISTENT_MEMORY 0x100
106 #define BL_MM_INCLUDE_FIRMWARE_MEMORY_2 0x200
108 #define BL_MM_INCLUDE_NO_FIRMWARE_MEMORY (BL_MM_INCLUDE_PERSISTENT_MEMORY | \
109 BL_MM_INCLUDE_TRUNCATED_MEMORY | \
110 BL_MM_INCLUDE_BAD_MEMORY | \
111 BL_MM_INCLUDE_RESERVED_ALLOCATED | \
112 BL_MM_INCLUDE_UNMAPPED_UNALLOCATED | \
113 BL_MM_INCLUDE_UNMAPPED_ALLOCATED | \
114 BL_MM_INCLUDE_MAPPED_UNALLOCATED | \
115 BL_MM_INCLUDE_MAPPED_ALLOCATED)
116 C_ASSERT(BL_MM_INCLUDE_NO_FIRMWARE_MEMORY
== 0x1BF);
118 #define BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY (BL_MM_INCLUDE_FIRMWARE_MEMORY_2 | \
119 BL_MM_INCLUDE_FIRMWARE_MEMORY)
120 C_ASSERT(BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY
== 0x240);
122 #define BL_MM_REQUEST_DEFAULT_TYPE 1
123 #define BL_MM_REQUEST_TOP_DOWN_TYPE 2
125 #define BL_MM_REMOVE_PHYSICAL_REGION_FLAG 0x40000000
126 #define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
128 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
129 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
130 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
131 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
132 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
133 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
135 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
136 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
138 #define BL_HT_VALUE_IS_INLINE 0x01
140 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
142 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
143 #define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
144 #define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
146 #define BL_MEMORY_CLASS_SHIFT 28
148 #define BL_FILE_READ_ACCESS 0x01
149 #define BL_FILE_WRITE_ACCESS 0x02
150 #define BL_DIRECTORY_ACCESS 0x04
151 #define BL_UNKNOWN_ACCESS 0x10
153 #define BL_DEVICE_READ_ACCESS 0x01
154 #define BL_DEVICE_WRITE_ACCESS 0x02
156 #define BL_DEVICE_ENTRY_OPENED 0x01
157 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
158 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
160 #define BL_FILE_ENTRY_OPENED 0x01
161 #define BL_FILE_ENTRY_READ_ACCESS 0x02
162 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
163 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
164 #define BL_FILE_ENTRY_DIRECTORY 0x10000
166 #define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
168 #define BL_IMG_VALID_FILE 0x01
169 #define BL_IMG_MEMORY_FILE 0x02
170 #define BL_IMG_REMOTE_FILE 0x04
172 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
173 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
174 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
175 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
176 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
178 #define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
179 #define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
180 #define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
181 #define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
182 #define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
183 #define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
184 #define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
185 #define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
186 #define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
188 #define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
189 #define BL_UTL_CHECKSUM_ROTATE 0x20000
190 #define BL_UTL_CHECKSUM_NEGATE 0x40000
191 #define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
192 #define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
194 /* ENUMERATIONS **************************************************************/
196 typedef enum _BL_COLOR
214 } BL_COLOR
, *PBL_COLOR
;
216 typedef enum _BL_MENU_POLICY
218 MenuPolicyLegacy
= 0,
219 MenuPolicyStandard
= 1
222 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
227 } BL_MEMORY_DESCRIPTOR_TYPE
;
229 typedef enum _BL_TRANSLATION_TYPE
235 } BL_TRANSLATION_TYPE
;
237 typedef enum _BL_ARCH_MODE
246 typedef enum _BL_DEVICE_TYPE
249 LegacyPartitionDevice
= 2,
258 // Local Device Types
260 typedef enum _BL_LOCAL_DEVICE_TYPE
267 VirtualDiskDevice
= 6
268 } BL_LOCAL_DEVICE_TYPE
;
273 typedef enum _BL_PARTITION_TYPE
283 typedef enum _BL_PATH_TYPE
292 typedef enum _BL_MEMORY_CLASS
302 typedef enum _BL_MEMORY_TYPE
307 BlLoaderMemory
= 0xD0000002,
308 BlLoaderDeviceMemory
= 0xD0000004,
309 BlLoaderHeap
= 0xD0000005,
310 BlLoaderPageDirectory
= 0xD0000006,
311 BlLoaderReferencePage
= 0xD0000007,
312 BlLoaderRamDisk
= 0xD0000008,
313 BlLoaderArchData
= 0xD0000009,
314 BlLoaderData
= 0xD000000A,
315 BlLoaderRegistry
= 0xD000000B,
316 BlLoaderBlockMemory
= 0xD000000C,
317 BlLoaderSelfMap
= 0xD000000F,
320 // Application Memory
322 BlApplicationReserved
= 0xE0000001,
323 BlApplicationData
= 0xE0000004,
328 BlConventionalMemory
= 0xF0000001,
329 BlUnusableMemory
= 0xF0000002,
330 BlReservedMemory
= 0xF0000003,
331 BlEfiBootMemory
= 0xF0000004,
332 BlEfiRuntimeMemory
= 0xF0000006,
333 BlAcpiReclaimMemory
= 0xF0000008,
334 BlAcpiNvsMemory
= 0xF0000009,
335 BlDeviceIoMemory
= 0xF000000A,
336 BlDevicePortMemory
= 0xF000000B,
337 BlPalMemory
= 0xF000000C,
340 typedef enum _BL_MEMORY_ATTR
343 // Memory Caching Attributes
345 BlMemoryUncached
= 0x00000001,
346 BlMemoryWriteCombined
= 0x00000002,
347 BlMemoryWriteThrough
= 0x00000004,
348 BlMemoryWriteBack
= 0x00000008,
349 BlMemoryUncachedExported
= 0x00000010,
350 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
351 BlMemoryValidCacheAttributeMask
= 0x000000FF,
354 // Memory Protection Attributes
356 BlMemoryWriteProtected
= 0x00000100,
357 BlMemoryReadProtected
= 0x00000200,
358 BlMemoryExecuteProtected
= 0x00000400,
359 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
360 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
363 // Memory Allocation Attributes
365 BlMemoryUnknown
= 0x00010000,
366 BlMemoryNonFixed
= 0x00020000,
367 BlMemoryFixed
= 0x00040000,
368 BlMemoryBelow1MB
= 0x00080000,
369 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryBelow1MB
| BlMemoryUnknown
,
370 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
373 // Memory Type Attributes
375 BlMemoryRuntime
= 0x01000000,
376 BlMemoryCoalesced
= 0x02000000,
377 BlMemoryUpdate
= 0x04000000,
378 BlMemoryNonFirmware
= 0x08000000,
379 BlMemoryPersistent
= 0x10000000,
380 BlMemorySpecial
= 0x20000000,
381 BlMemoryFirmware
= 0x80000000,
382 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemoryPersistent
| BlMemorySpecial
| BlMemoryFirmware
,
383 BlMemoryValidTypeAttributeMask
= 0xFF000000,
386 /* CALLBACKS *****************************************************************/
388 struct _BL_FILE_ENTRY
;
389 struct _BL_FILE_INFORMATION
;
393 _In_
struct _BL_FILE_ENTRY
* Directory
,
394 _In_ PWCHAR FileName
,
396 _Out_
struct _BL_FILE_ENTRY
** FileEntry
402 _In_
struct _BL_FILE_ENTRY
* FileEntry
408 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
411 _Out_opt_ PULONG BytesRead
422 (*PBL_FILE_GET_NEXT
) (
428 (*PBL_FILE_GET_INFO
) (
429 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
430 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
435 (*PBL_FILE_SET_INFO
) (
436 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
437 _In_
struct _BL_FILE_INFORMATION
* FileInfo
442 (*PBL_FS_INIT_CALLBACK
) (
448 (*PBL_FS_DESTROY_CALLBACK
) (
454 (*PBL_FS_MOUNT_CALLBACK
) (
457 _Out_
struct _BL_FILE_ENTRY
** FileEntry
462 (*PBL_FS_PURGE_CALLBACK
) (
468 (*PBL_FILE_DESTROY_CALLBACK
) (
472 struct _BL_TEXT_CONSOLE
;
473 struct _BL_DISPLAY_STATE
;
474 struct _BL_DISPLAY_MODE
;
475 struct _BL_INPUT_CONSOLE
;
476 struct _BL_REMOTE_CONSOLE
;
477 struct _BL_GRAPHICS_CONSOLE
;
480 (*PCONSOLE_DESTRUCT
) (
481 _In_
struct _BL_TEXT_CONSOLE
* Console
486 (*PCONSOLE_REINITIALIZE
) (
487 _In_
struct _BL_TEXT_CONSOLE
* Console
492 (*PCONSOLE_GET_TEXT_STATE
) (
493 _In_
struct _BL_TEXT_CONSOLE
* Console
,
494 _Out_
struct _BL_DISPLAY_STATE
* TextState
499 (*PCONSOLE_SET_TEXT_STATE
) (
500 _In_
struct _BL_TEXT_CONSOLE
* Console
,
502 _In_
struct _BL_DISPLAY_STATE
* TextState
507 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
508 _In_
struct _BL_TEXT_CONSOLE
* Console
,
509 _Out_ PULONG TextResolution
514 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
515 _In_
struct _BL_TEXT_CONSOLE
* Console
,
516 _In_ ULONG NewTextResolution
,
517 _Out_ PULONG OldTextResolution
522 (*PCONSOLE_CLEAR_TEXT
) (
523 _In_
struct _BL_TEXT_CONSOLE
* Console
,
524 _In_ BOOLEAN LineOnly
529 (*PCONSOLE_IS_ENABLED
) (
530 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
535 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
536 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
537 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
542 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
543 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
544 _In_
struct _BL_DISPLAY_MODE DisplayMode
550 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
556 (*PCONSOLE_WRITE_TEXT
) (
557 _In_
struct _BL_TEXT_CONSOLE
* Console
,
564 (*PBL_TBL_LOOKUP_ROUTINE
) (
566 _In_ PVOID Argument1
,
567 _In_ PVOID Argument2
,
568 _In_ PVOID Argument3
,
574 (*PBL_TBL_MAP_ROUTINE
) (
576 _In_ ULONG EntryIndex
581 (*PBL_TBL_SET_ROUTINE
) (
587 (*PBL_IO_DESTROY_ROUTINE
) (
591 struct _BL_HASH_ENTRY
;
594 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
595 _In_
struct _BL_HASH_ENTRY
* Entry1
,
596 _In_
struct _BL_HASH_ENTRY
* Entry2
601 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
602 _In_
struct _BL_HASH_ENTRY
* Entry
,
606 struct _BL_DEVICE_ENTRY
;
607 struct _BL_DEVICE_DESCRIPTOR
;
608 struct _BL_DEVICE_INFORMATION
;
612 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
619 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
620 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
625 (*PBL_DEVICE_CLOSE
) (
626 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
632 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
635 _Out_ PULONG BytesRead
640 (*PBL_DEVICE_WRITE
) (
646 (*PBL_DEVICE_GET_INFORMATION
) (
647 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
648 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
653 (*PBL_DEVICE_SET_INFORMATION
) (
654 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
655 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
660 (*PBL_DEVICE_RESET
) (
666 (*PBL_DEVICE_FLUSH
) (
672 (*PBL_DEVICE_CREATE
) (
676 /* DATA STRUCTURES ***********************************************************/
678 typedef struct _BL_LIBRARY_PARAMETERS
681 ULONG TranslationType
;
682 ULONG MinimumAllocationCount
;
683 ULONG MinimumHeapSize
;
684 ULONG HeapAllocationAttributes
;
685 PWCHAR ApplicationBaseDirectory
;
686 ULONG DescriptorCount
;
687 PWCHAR FontBaseDirectory
;
688 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
690 /* This should eventually go into a more public header */
691 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
693 /* This header tells the library what image we're dealing with */
698 ULONG MemoryTranslationType
;
700 /* Where is the image located */
704 /* Offset to BL_MEMORY_DATA */
705 ULONG MemoryDataOffset
;
707 /* Offset to BL_APPLICATION_ENTRY */
708 ULONG AppEntryOffset
;
710 /* Offset to BL_DEVICE_DESCRPIPTOR */
711 ULONG BootDeviceOffset
;
713 /* Offset to BL_FIRMWARE_PARAMETERS */
714 ULONG FirmwareParametersOffset
;
716 /* Offset to BL_RETURN_ARGUMENTS */
717 ULONG ReturnArgumentsOffset
;
718 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
720 typedef struct _BL_MEMORY_DATA
724 ULONG DescriptorCount
;
725 ULONG DescriptorSize
;
726 ULONG DescriptorOffset
;
727 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
729 typedef struct _BL_FIRMWARE_DESCRIPTOR
733 EFI_HANDLE ImageHandle
;
734 EFI_SYSTEM_TABLE
*SystemTable
;
735 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
737 typedef struct _BL_RETURN_ARGUMENTS
744 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
746 typedef struct _BL_MEMORY_DESCRIPTOR
748 LIST_ENTRY ListEntry
;
754 ULONGLONG VirtualPage
;
758 ULONGLONG BaseAddress
;
759 ULONGLONG VirtualAddress
;
765 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
767 typedef struct _BL_BCD_OPTION
773 ULONG NextEntryOffset
;
775 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
777 typedef struct _BL_APPLICATION_ENTRY
783 BL_BCD_OPTION BcdData
;
784 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
786 typedef struct _BL_LOADED_APPLICATION_ENTRY
790 PBL_BCD_OPTION BcdData
;
791 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
793 typedef struct _BL_MENU_STATUS
800 ULONG AdvancedOptions
: 1;
801 ULONG BootOptions
: 1;
810 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
812 typedef enum _BL_BOOT_ERROR_STATUS
822 } BL_BOOT_ERROR_STATUS
;
824 typedef struct _BL_HARDDISK_DEVICE
831 ULONG PartitionSignature
;
836 GUID PartitionSignature
;
844 } BL_HARDDISK_DEVICE
;
846 typedef struct _BL_LOCAL_DEVICE
856 BL_HARDDISK_DEVICE HardDisk
;
860 PHYSICAL_ADDRESS ImageBase
;
861 LARGE_INTEGER ImageSize
;
865 ULONG File
; // unknown for now
867 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
869 typedef struct _BL_DEVICE_DESCRIPTOR
871 DEVICE_TYPE DeviceType
;
877 BL_LOCAL_DEVICE Local
;
888 ULONG PartitionNumber
;
896 BL_LOCAL_DEVICE Disk
;
899 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
901 typedef struct _BL_FILE_PATH_DESCRIPTOR
906 UCHAR Path
[ANYSIZE_ARRAY
];
907 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
909 typedef struct _BL_WINDOWS_LOAD_OPTIONS
915 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
916 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
918 typedef struct _BL_ARCH_CONTEXT
921 BL_TRANSLATION_TYPE TranslationType
;
923 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
925 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
931 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
933 typedef struct _BL_ADDRESS_RANGE
937 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
939 typedef struct _BL_FILE_INFORMATION
945 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
947 typedef struct _BL_FILE_CALLBACKS
950 PBL_FILE_CLOSE Close
;
952 PBL_FILE_WRITE Write
;
953 PBL_FILE_GET_NEXT GetNext
;
954 PBL_FILE_GET_INFO GetInfo
;
955 PBL_FILE_SET_INFO SetInfo
;
956 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
958 typedef struct _BL_FILE_ENTRY
964 ULONG ReferenceCount
;
966 ULONGLONG TotalBytesRead
;
968 BL_FILE_CALLBACKS Callbacks
;
969 PVOID FsSpecificData
;
970 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
972 typedef struct _BL_FILE_SYSTEM_ENTRY
974 LIST_ENTRY ListEntry
;
975 PBL_FS_INIT_CALLBACK InitCallback
;
976 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
977 PBL_FS_MOUNT_CALLBACK MountCallback
;
978 PBL_FS_PURGE_CALLBACK PurgeCallback
;
979 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
981 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
983 PBL_FS_INIT_CALLBACK Init
;
984 PBL_FS_DESTROY_CALLBACK Destroy
;
985 PBL_FS_MOUNT_CALLBACK Mount
;
986 PBL_FS_PURGE_CALLBACK Purge
;
987 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
989 typedef struct _BL_DISPLAY_STATE
996 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
998 typedef struct _BL_DISPLAY_MODE
1003 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
1005 typedef struct _BL_TEXT_CONSOLE_VTABLE
1007 PCONSOLE_DESTRUCT Destruct
;
1008 PCONSOLE_REINITIALIZE Reinitialize
;
1009 PCONSOLE_GET_TEXT_STATE GetTextState
;
1010 PCONSOLE_SET_TEXT_STATE SetTextState
;
1011 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
1012 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
1013 PCONSOLE_CLEAR_TEXT ClearText
;
1014 PCONSOLE_WRITE_TEXT WriteText
;
1015 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
1017 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
1019 BL_TEXT_CONSOLE_VTABLE Text
;
1020 PCONSOLE_IS_ENABLED IsEnabled
;
1021 PCONSOLE_ENABLE Enable
;
1022 PVOID GetConsoleResolution
;
1023 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
1024 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
1025 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
1026 /// more for graphics ///
1027 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1029 typedef struct _BL_TEXT_CONSOLE
1031 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1032 BL_DISPLAY_STATE State
;
1033 BL_DISPLAY_MODE DisplayMode
;
1035 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1037 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1038 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1040 typedef struct _BL_INPUT_CONSOLE_VTABLE
1042 PCONSOLE_DESTRUCT Destruct
;
1043 PCONSOLE_REINITIALIZE Reinitialize
;
1044 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1045 //PCONSOLE_READ_INPUT ReadInput;
1046 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1047 //PCONSOLE_FILL_BUFFER FillBuffer;
1048 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1050 typedef struct _BL_INPUT_CONSOLE
1052 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1057 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1059 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1063 } BL_GRAPHICS_CONSOLE_TYPE
;
1065 typedef struct _BL_GRAPHICS_CONSOLE
1067 BL_TEXT_CONSOLE TextConsole
;
1068 BL_DISPLAY_MODE DisplayMode
;
1072 BL_DISPLAY_MODE OldDisplayMode
;
1073 ULONG OldPixelDepth
;
1075 BL_GRAPHICS_CONSOLE_TYPE Type
;
1076 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1078 ULONG FrameBufferSize
;
1079 ULONG PixelsPerScanLine
;
1082 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1084 typedef struct _BL_REMOTE_CONSOLE
1086 BL_TEXT_CONSOLE TextConsole
;
1087 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1089 typedef struct _BL_HASH_TABLE
1091 PLIST_ENTRY HashLinks
;
1093 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1094 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1095 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1097 typedef struct _BL_HASH_ENTRY
1102 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1104 typedef struct _BL_HASH_VALUE
1108 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1110 typedef struct _BL_HASH_NODE
1112 LIST_ENTRY ListEntry
;
1113 BL_HASH_ENTRY Entry
;
1114 BL_HASH_VALUE Value
;
1115 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1117 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1119 BL_LOCAL_DEVICE_TYPE Type
;
1122 BL_PARTITION_TYPE PartitionType
;
1125 ULONGLONG LastBlock
;
1142 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1144 typedef struct _BL_DEVICE_INFORMATION
1146 BL_DEVICE_TYPE DeviceType
;
1149 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1151 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1153 typedef struct _BL_BLOCK_DEVICE
1155 BL_BLOCK_DEVICE_INFORMATION
;
1156 ULONGLONG StartOffset
;
1157 EFI_BLOCK_IO
* Protocol
;
1159 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1161 typedef struct _BL_PROTOCOL_HANDLE
1165 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1167 typedef struct _BL_DEVICE_CALLBACKS
1169 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1170 PBL_DEVICE_OPEN Open
;
1171 PBL_DEVICE_CLOSE Close
;
1172 PBL_DEVICE_READ Read
;
1173 PBL_DEVICE_WRITE Write
;
1174 PBL_DEVICE_GET_INFORMATION GetInformation
;
1175 PBL_DEVICE_SET_INFORMATION SetInformation
;
1176 PBL_DEVICE_RESET Reset
;
1177 PBL_DEVICE_FLUSH Flush
;
1178 PBL_DEVICE_CREATE Create
;
1179 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1181 typedef struct _BL_DEVICE_ENTRY
1186 ULONG ReferenceCount
;
1187 BL_DEVICE_CALLBACKS Callbacks
;
1188 PVOID DeviceSpecificData
;
1189 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1190 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1192 typedef struct _BL_IMG_FILE
1202 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1204 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1206 PBL_APPLICATION_ENTRY AppEntry
;
1209 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1211 typedef struct _BL_IMAGE_PARAMETERS
1216 } BL_IMAGE_PARAMETERS
, *PBL_IMAGE_PARAMETERS
;
1218 typedef struct _BL_DEFERRED_FONT_FILE
1220 LIST_ENTRY ListEntry
;
1222 PBL_DEVICE_DESCRIPTOR Device
;
1224 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1228 typedef struct _BMP_HEADER
1234 } BMP_HEADER
, *PBMP_HEADER
;
1236 typedef struct _DIB_HEADER
1245 ULONG XPelsPerMeter
;
1246 ULONG YPelsPerMEter
;
1249 } DIB_HEADER
, *PDIB_HEADER
;
1251 typedef struct _BITMAP
1253 BMP_HEADER BmpHeader
;
1254 DIB_HEADER DibHeader
;
1258 typedef struct _COORD
1264 typedef struct _BL_PD_DATA_BLOB
1269 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1271 /* INLINE ROUTINES ***********************************************************/
1275 BlSetupDefaultParameters (
1276 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1279 BL_LIBRARY_PARAMETERS DefaultParameters
=
1291 /* Copy the defaults */
1292 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1297 MmMdInitializeListHead (
1298 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1301 /* Initialize the list */
1302 InitializeListHead(&List
->ListHead
);
1303 List
->First
= &List
->ListHead
;
1308 /* INITIALIZATION ROUTINES ***************************************************/
1311 BlInitializeLibrary(
1312 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1313 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1324 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1329 _In_ PBL_MEMORY_DATA MemoryData
,
1330 _In_ BL_TRANSLATION_TYPE TranslationType
,
1331 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1341 _In_ PBL_MEMORY_DATA MemoryData
,
1342 _In_ ULONG MinimumPages
1348 _In_ PBL_MEMORY_DATA MemoryData
,
1349 _In_ BL_TRANSLATION_TYPE TranslationType
,
1350 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1355 _In_ ULONG HeapSize
,
1356 _In_ ULONG HeapAttributes
1362 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1366 BlpDeviceInitialize (
1381 BlpDisplayInitialize (
1386 BlpDisplayReinitialize (
1400 /* FIRMWARE ROUTINES *********************************************************/
1410 _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
1414 BlFwEnumerateDevice (
1415 _In_ PBL_DEVICE_DESCRIPTOR Device
1422 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1427 _In_ ULONG StallTime
1441 EfiConOutOutputString (
1442 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1447 EfiConOutQueryMode (
1448 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1450 _In_ UINTN
* Columns
,
1456 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1461 EfiConOutReadCurrentMode (
1462 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1463 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1467 EfiConOutSetAttribute (
1468 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1469 _In_ ULONG Attribute
1473 EfiConOutSetCursorPosition (
1474 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1480 EfiConOutEnableCursor (
1481 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1482 _In_ BOOLEAN Visible
1486 EfiLocateHandleBuffer (
1487 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1488 _In_ EFI_GUID
*Protocol
,
1489 _Inout_ PULONG HandleCount
,
1490 _Inout_ EFI_HANDLE
** Buffer
1495 _In_ EFI_HANDLE Handle
,
1496 _In_ EFI_GUID
*Protocol
,
1497 _Out_ PVOID
* Interface
1502 _In_ EFI_HANDLE Handle
,
1503 _In_ EFI_GUID
*Protocol
1507 EfiGopGetCurrentMode (
1508 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1510 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1515 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1520 EfiGopGetFrameBuffer (
1521 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1522 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1523 _Out_ UINTN
*FrameBufferSize
1528 _In_ EFI_RESET_TYPE ResetType
1533 _In_ EFI_DEVICE_PATH
*DevicePath
1537 EfiIsDevicePathParent (
1538 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1539 _In_ EFI_DEVICE_PATH
*DevicePath2
1544 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1550 _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
1553 /* PLATFORM TIMER ROUTINES ***************************************************/
1556 BlpTimeCalibratePerformanceCounter (
1561 BlTimeQueryPerformanceCounter (
1562 _Out_opt_ PLARGE_INTEGER Frequency
1566 BlArchGetPerformanceCounter (
1570 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1573 BlpDisplayRegisterLocale (
1577 /* FONT ROUTINES *************************************************************/
1580 BfiFreeDeferredFontFile (
1581 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1586 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1587 _In_ PWCHAR FontPath
1591 BfLoadDeferredFontFiles (
1597 _In_ PBL_GRAPHICS_CONSOLE Console
1601 BfClearToEndOfLine (
1602 _In_ PBL_GRAPHICS_CONSOLE Console
1605 /* FILESYSTEM ROUTINES *******************************************************/
1614 _In_ ULONG DeviceId
,
1616 _Out_ PBL_FILE_ENTRY
* FileEntry
1626 _In_ ULONG DeviceId
,
1628 _Out_ PBL_FILE_ENTRY
* FileEntry
1631 /* DEBUG ROUTINES ************************************************************/
1635 BlBdDebuggerEnabled (
1640 BlBdPullRemoteFile (
1641 _In_ PWCHAR FilePath
,
1642 _Out_ PVOID BaseAddress
,
1643 _Out_ PULONGLONG FileSize
1654 _In_ ULONG ErrorCode
,
1655 _In_ ULONG Parameter1
,
1656 _In_ ULONG_PTR Parameter2
,
1657 _In_ ULONG_PTR Parameter3
,
1658 _In_ ULONG_PTR Parameter4
1661 /* UTILITY ROUTINES **********************************************************/
1665 _In_ ULONG Function
,
1666 _In_ ULONG SubFunction
,
1671 BlArchIsCpuIdFunctionSupported (
1676 BlUtlUpdateProgress (
1677 _In_ ULONG Percentage
,
1678 _Out_opt_ PBOOLEAN Completed
1683 _Out_ PVOID
* TableAddress
,
1684 _In_ ULONG Signature
1693 BlUtlRegisterProgressRoutine (
1699 _In_ ULONG PartialSum
,
1706 BlGetApplicationBaseAndSize (
1707 _Out_ PVOID
* ImageBase
,
1708 _Out_ PULONG ImageSize
1712 BlDestroyBootEntry (
1713 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1718 _In_
const GUID
* DataGuid
,
1720 _Inout_ PBL_PD_DATA_BLOB DataBlob
1723 /* FIRMWARE UTILITY ROUTINES *************************************************/
1726 EfiGetEfiStatusCode(
1727 _In_ NTSTATUS Status
1731 EfiGetNtStatusCode (
1732 _In_ EFI_STATUS EfiStatus
1742 _In_ ULONG BasePage
,
1743 _In_ ULONG PageCount
1747 BlGetApplicationIdentifier (
1752 BlpSecureBootEFIIsEnabled (
1757 BlSecureBootIsEnabled (
1758 _Out_ PBOOLEAN SecureBootEnabled
1762 BlSecureBootCheckForFactoryReset (
1766 /* RESOURCE ROUTINES *********************************************************/
1769 BlResourceFindMessage (
1774 BlResourceFindHtml (
1779 BlpResourceInitialize (
1783 /* TABLE ROUTINES ************************************************************/
1789 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1796 _Out_ PULONG EntryIndex
,
1797 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1798 _In_ PVOID Argument1
,
1799 _In_ PVOID Argument2
,
1800 _In_ PVOID Argument3
,
1801 _In_ PVOID Argument4
1806 _Inout_ PVOID
** Table
,
1807 _Inout_ PULONG Count
,
1809 _Out_ PULONG EntryIndex
,
1810 _In_ PBL_TBL_SET_ROUTINE Callback
1814 TblDoNotPurgeEntry (
1818 /* HASH TABLE ROUTINES *******************************************************/
1823 _In_ PBL_HASH_ENTRY Entry
,
1831 _In_ PBL_HASH_ENTRY Entry
,
1832 _Out_ PBL_HASH_VALUE
*Value
1838 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1839 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1843 /* BCD OPTION ROUTINES *******************************************************/
1847 _In_ PBL_BCD_OPTION List
,
1852 BlGetBootOptionListSize (
1853 _In_ PBL_BCD_OPTION BcdOption
1857 BlGetBootOptionSize (
1858 _In_ PBL_BCD_OPTION BcdOption
1862 BlGetBootOptionString (
1863 _In_ PBL_BCD_OPTION List
,
1869 BlGetBootOptionInteger (
1870 _In_ PBL_BCD_OPTION List
,
1872 _Out_ PULONGLONG Value
1876 BlGetBootOptionBoolean (
1877 _In_ PBL_BCD_OPTION List
,
1879 _Out_ PBOOLEAN Value
1883 BlpGetBootOptionIntegerList (
1884 _In_ PBL_BCD_OPTION List
,
1886 _Out_ PULONGLONG
* Value
,
1887 _Out_ PULONGLONG Count
,
1892 BlGetBootOptionDevice (
1893 _In_ PBL_BCD_OPTION List
,
1895 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1896 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1900 BlGetBootOptionGuid (
1901 _In_ PBL_BCD_OPTION List
,
1907 BlGetBootOptionGuidList (
1908 _In_ PBL_BCD_OPTION List
,
1916 _In_ PBL_BCD_OPTION OptionList
,
1917 _Out_ PBL_BCD_OPTION
*CopiedOptions
1921 BlAppendBootOptionBoolean (
1922 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1927 BlAppendBootOptionInteger (
1928 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1929 _In_ ULONG OptionId
,
1930 _In_ ULONGLONG Value
1934 BlAppendBootOptionString (
1935 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1936 _In_ PWCHAR OptionString
1940 BlAppendBootOptions (
1941 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1942 _In_ PBL_BCD_OPTION Options
1946 BlRemoveBootOption (
1947 _In_ PBL_BCD_OPTION List
,
1952 BlReplaceBootOptions (
1953 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1954 _In_ PBL_BCD_OPTION NewOptions
1957 /* BOOT REGISTRY ROUTINES ****************************************************/
1961 _In_ HANDLE KeyHandle
1966 _In_ HANDLE ParentHandle
,
1967 _In_ PWCHAR KeyName
,
1968 _Out_ PHANDLE Handle
1973 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1974 _Out_ PHANDLE HiveHandle
1978 BiGetRegistryValue (
1979 _In_ HANDLE KeyHandle
,
1980 _In_ PWCHAR ValueName
,
1982 _Out_ PVOID
* Buffer
,
1983 _Out_ PULONG ValueLength
1987 BiEnumerateSubKeys (
1988 _In_ HANDLE KeyHandle
,
1989 _Out_ PWCHAR
** SubKeyList
,
1990 _Out_ PULONG SubKeyCount
1995 _In_ HANDLE KeyHandle
2000 _In_ HANDLE KeyHandle
2003 /* CONTEXT ROUTINES **********************************************************/
2006 BlpArchSwitchContext (
2007 _In_ BL_ARCH_MODE NewMode
2011 Archx86TransferTo32BitApplicationAsm (
2015 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
2018 MmMdInitializeList (
2019 _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList
,
2021 _In_ PLIST_ENTRY ListHead
2024 PBL_MEMORY_DESCRIPTOR
2025 MmMdFindDescriptor (
2026 _In_ ULONG WhichList
,
2031 PBL_MEMORY_DESCRIPTOR
2032 MmMdFindDescriptorFromMdl (
2033 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2040 _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList
,
2041 _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList
,
2042 _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor
,
2043 _Out_ PULONG ActualCount
,
2050 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2055 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2058 PBL_MEMORY_DESCRIPTOR
2059 MmMdInitByteGranularDescriptor (
2061 _In_ BL_MEMORY_TYPE Type
,
2062 _In_ ULONGLONG BasePage
,
2063 _In_ ULONGLONG VirtualPage
,
2064 _In_ ULONGLONG PageCount
2068 MmMdFreeGlobalDescriptors (
2073 MmMdAddDescriptorToList (
2074 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2075 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
2080 MmMdRemoveDescriptorFromList (
2081 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2082 _In_ PBL_MEMORY_DESCRIPTOR Entry
2086 MmMdFindSatisfyingRegion (
2087 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
2088 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
2089 _In_ ULONGLONG Pages
,
2090 _In_ PBL_ADDRESS_RANGE BaseRange
,
2091 _In_ PBL_ADDRESS_RANGE VirtualRange
,
2092 _In_ BOOLEAN TopDown
,
2093 _In_ BL_MEMORY_TYPE MemoryType
,
2095 _In_ ULONG Alignment
2099 MmMdRemoveRegionFromMdlEx (
2100 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2102 __in ULONGLONG BasePage
,
2103 __in ULONGLONG PageCount
,
2104 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2108 MmMdFreeDescriptor (
2109 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2112 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2115 BlMmAllocatePhysicalPages(
2116 _Inout_ PPHYSICAL_ADDRESS Address
,
2117 _In_ BL_MEMORY_TYPE MemoryType
,
2118 _In_ ULONGLONG PageCount
,
2119 _In_ ULONG Attributes
,
2120 _In_ ULONG Alignment
2124 MmPapAllocatePhysicalPagesInRange (
2125 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2126 _In_ BL_MEMORY_TYPE MemoryType
,
2127 _In_ ULONGLONG Pages
,
2128 _In_ ULONG Attributes
,
2129 _In_ ULONG Alignment
,
2130 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2131 _In_opt_ PBL_ADDRESS_RANGE Range
,
2132 _In_ ULONG RangeType
2136 MmPaReleaseSelfMapPages (
2137 _In_ PHYSICAL_ADDRESS Address
2141 MmPaReserveSelfMapPages (
2142 _Inout_ PPHYSICAL_ADDRESS PhysicalAddress
,
2143 _In_ ULONG Alignment
,
2144 _In_ ULONG PageCount
2147 BlMmFreePhysicalPages (
2148 _In_ PHYSICAL_ADDRESS Address
2154 _In_ ULONG WhichList
2158 MmPapAllocatePagesInRange (
2159 _Inout_ PVOID
* PhysicalAddress
,
2160 _In_ BL_MEMORY_TYPE MemoryType
,
2161 _In_ ULONGLONG Pages
,
2162 _In_ ULONG Attributes
,
2163 _In_ ULONG Alignment
,
2164 _In_opt_ PBL_ADDRESS_RANGE Range
,
2170 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2175 BlpMmInitializeConstraints (
2180 BlMmRemoveBadMemory (
2186 _In_ PLIST_ENTRY MemoryMap
,
2187 _In_ PBL_IMAGE_PARAMETERS MemoryParameters
,
2188 _In_ ULONG WhichTypes
,
2192 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2195 MmSelectMappingAddress (
2196 _Out_ PVOID
* MappingAddress
,
2197 _In_ ULONGLONG Size
,
2198 _In_ ULONG AllocationAttributes
,
2200 _In_ PHYSICAL_ADDRESS PhysicalAddress
2204 MmMapPhysicalAddress (
2205 _Inout_ PPHYSICAL_ADDRESS PhysicalAddress
,
2206 _Out_ PVOID
* VirtualAddress
,
2207 _Inout_ PULONGLONG Size
,
2208 _In_ ULONG CacheAttributes
2212 MmUnmapVirtualAddress (
2213 _Inout_ PVOID
* VirtualAddress
,
2214 _Inout_ PULONGLONG Size
2218 BlMmMapPhysicalAddressEx (
2219 _In_ PVOID
* VirtualAddress
,
2220 _In_ ULONG Attributes
,
2221 _In_ ULONGLONG Size
,
2222 _In_ PHYSICAL_ADDRESS PhysicalAddress
2226 BlMmUnmapVirtualAddressEx (
2227 _In_ PVOID VirtualAddress
,
2232 BlMmTranslateVirtualAddress (
2233 _In_ PVOID VirtualAddress
,
2234 _Out_ PPHYSICAL_ADDRESS PhysicalAddress
2238 MmArchTranslateVirtualAddress (
2239 _In_ PVOID VirtualAddress
,
2240 _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress
,
2241 _Out_opt_ PULONG CachingFlags
2244 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2247 BlpMmCreateBlockAllocator (
2251 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2263 /* DISPLAY ROUTINES **********************************************************/
2266 BlDisplayGetTextCellResolution (
2267 _Out_ PULONG TextWidth
,
2268 _Out_ PULONG TextHeight
2272 BlDisplaySetScreenResolution (
2277 BlDisplayGetScreenResolution (
2283 BlDisplayInvalidateOemBitmap (
2288 BlDisplayGetOemBitmap (
2289 _Out_ PCOORD Offset
,
2290 _Out_opt_ PULONG Flags
2294 BlDisplayValidOemBitmap (
2299 BlDisplayClearScreen (
2304 BlDisplaySetCursorType (
2308 /* I/O ROUTINES **************************************************************/
2311 BlpIoRegisterDestroyRoutine (
2312 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2322 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2325 _Out_ PULONG DeviceId
2329 BlDeviceGetInformation (
2330 _In_ ULONG DeviceId
,
2331 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2335 BlDeviceSetInformation (
2336 _In_ ULONG DeviceId
,
2337 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2341 BlDeviceReadAtOffset (
2342 _In_ ULONG DeviceId
,
2344 _In_ ULONGLONG Offset
,
2346 _Out_ PULONG BytesRead
2349 /* IMAGE ROUTINES ************************************************************/
2352 BlImgLoadImageWithProgress2 (
2353 _In_ ULONG DeviceId
,
2354 _In_ BL_MEMORY_TYPE MemoryType
,
2355 _In_ PWCHAR FileName
,
2356 _Inout_ PVOID
* MappedBase
,
2357 _Inout_ PULONG MappedSize
,
2358 _In_ ULONG ImageFlags
,
2359 _In_ BOOLEAN ShowProgress
,
2360 _Out_opt_ PUCHAR
* HashBuffer
,
2361 _Out_opt_ PULONG HashSize
2364 PIMAGE_SECTION_HEADER
2366 _In_ PVOID ImageBase
,
2367 _In_ ULONG ImageSize
2371 BlImgLoadBootApplication (
2372 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2373 _Out_ PULONG AppHandle
2377 BlImgStartBootApplication (
2378 _In_ ULONG AppHandle
,
2379 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2383 BlImgUnloadBootApplication (
2384 _In_ ULONG AppHandle
2388 BlImgQueryCodeIntegrityBootOptions (
2389 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2390 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2391 _Out_ PBOOLEAN TestSigning
2394 /* FILE I/O ROUTINES *********************************************************/
2402 BlFileReadAtOffsetEx (
2405 _In_ ULONGLONG ByteOffset
,
2407 _Out_ PULONG BytesReturned
,
2412 BlFileGetInformation (
2414 _In_ PBL_FILE_INFORMATION FileInfo
2419 _In_ ULONG DeviceId
,
2420 _In_ PWCHAR FileName
,
2425 /* BLOCK I/O ROUTINES *******************************************************/
2428 BlockIoEfiCompareDevice (
2429 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2430 _In_ EFI_HANDLE Handle
2433 /* INPUT CONSOLE ROUTINES ****************************************************/
2436 ConsoleInputLocalDestruct (
2437 _In_
struct _BL_INPUT_CONSOLE
* Console
2441 ConsoleInputBaseReinitialize (
2442 _In_
struct _BL_INPUT_CONSOLE
* Console
2446 ConsoleCreateLocalInputCnsole (
2450 /* TEXT CONSOLE ROUTINES *****************************************************/
2453 ConsoleGraphicalDestruct (
2454 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2458 ConsoleGraphicalClearText (
2459 _In_ PBL_GRAPHICS_CONSOLE Console
,
2460 _In_ BOOLEAN LineOnly
2464 ConsoleGraphicalClearPixels (
2465 _In_ PBL_GRAPHICS_CONSOLE Console
,
2470 ConsoleGraphicalReinitialize (
2471 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2475 ConsoleGraphicalSetTextState (
2476 _In_ PBL_GRAPHICS_CONSOLE Console
,
2478 _In_ PBL_DISPLAY_STATE TextState
2482 ConsoleGraphicalIsEnabled (
2483 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2487 ConsoleGraphicalGetGraphicalResolution (
2488 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2489 _In_ PBL_DISPLAY_MODE DisplayMode
2493 ConsoleGraphicalGetOriginalResolution (
2494 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2495 _In_ PBL_DISPLAY_MODE DisplayMode
2499 ConsoleGraphicalEnable (
2500 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2505 ConsoleTextLocalDestruct (
2506 _In_
struct _BL_TEXT_CONSOLE
* Console
2510 ConsoleTextLocalReinitialize (
2511 _In_
struct _BL_TEXT_CONSOLE
* Console
2515 ConsoleTextBaseGetTextState (
2516 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2517 _Out_ PBL_DISPLAY_STATE TextState
2521 ConsoleTextLocalSetTextState (
2522 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2524 _In_ PBL_DISPLAY_STATE TextState
2528 ConsoleTextBaseGetTextResolution (
2529 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2530 _Out_ PULONG TextResolution
2534 ConsoleTextLocalSetTextResolution (
2535 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2536 _In_ ULONG NewTextResolution
,
2537 _Out_ PULONG OldTextResolution
2541 ConsoleTextLocalClearText (
2542 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2543 _In_ BOOLEAN LineOnly
2547 ConsoleTextLocalWriteText (
2548 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2550 _In_ ULONG Attribute
2554 ConsoleTextLocalConstruct (
2555 _In_ PBL_TEXT_CONSOLE TextConsole
,
2556 _In_ BOOLEAN Activate
2560 ConsolepFindResolution (
2561 _In_ PBL_DISPLAY_MODE Mode
,
2562 _In_ PBL_DISPLAY_MODE List
,
2567 ConsoleFirmwareTextClear (
2568 _In_ PBL_TEXT_CONSOLE Console
,
2569 _In_ BOOLEAN LineOnly
2573 ConsoleFirmwareTextClose (
2574 _In_ PBL_TEXT_CONSOLE TextConsole
2578 ConsoleFirmwareTextOpen (
2579 _In_ PBL_TEXT_CONSOLE TextConsole
2583 ConsoleFirmwareTextSetState (
2584 _In_ PBL_TEXT_CONSOLE TextConsole
,
2586 _In_ PBL_DISPLAY_STATE State
2590 ConsoleGraphicalConstruct (
2591 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2595 ConsoleCreateRemoteConsole (
2596 _In_ PBL_TEXT_CONSOLE
* TextConsole
2600 ConsoleEfiGraphicalOpenProtocol (
2601 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2602 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2606 ConsoleFirmwareGraphicalClose (
2607 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2611 ConsoleFirmwareGraphicalDisable (
2612 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2616 ConsoleFirmwareGraphicalClear (
2617 _In_ PBL_GRAPHICS_CONSOLE Console
,
2622 ConsoleFirmwareGraphicalEnable (
2623 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2628 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2632 ConsoleEfiUgaClose (
2633 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2637 ConsoleEfiGopClose (
2638 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2643 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2647 ConsoleEfiGopEnable (
2648 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2652 ConsoleEfiUgaSetResolution (
2653 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2654 _In_ PBL_DISPLAY_MODE DisplayMode
,
2655 _In_ ULONG DisplayModeCount
2659 ConsoleCreateLocalInputConsole (
2664 ConsoleInputLocalEraseBuffer (
2665 _In_ PBL_INPUT_CONSOLE Console
,
2666 _In_opt_ PULONG ValueToFill
2670 ConsolepClearBuffer (
2671 _In_ PUCHAR FrameBuffer
,
2673 _In_ PUCHAR FillColor
,
2675 _In_ ULONG ScanlineWidth
,
2676 _In_ ULONG PixelDepth
2680 ConsolepConvertColorToPixel (
2681 _In_ BL_COLOR Color
,
2685 extern ULONG MmDescriptorCallTreeCount
;
2686 extern ULONG BlpApplicationFlags
;
2687 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2688 extern BL_TRANSLATION_TYPE MmTranslationType
;
2689 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2690 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2691 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2692 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2693 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2694 extern EFI_GUID EfiGraphicsOutputProtocol
;
2695 extern EFI_GUID EfiUgaDrawProtocol
;
2696 extern EFI_GUID EfiLoadedImageProtocol
;
2697 extern EFI_GUID EfiDevicePathProtocol
;
2698 extern EFI_GUID EfiBlockIoProtocol
;
2699 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2700 extern EFI_GUID EfiRootAcpiTableGuid
;
2701 extern EFI_GUID EfiRootAcpiTable10Guid
;
2702 extern EFI_GUID EfiGlobalVariable
;
2703 extern ULONG ConsoleGraphicalResolutionListFlags
;
2704 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2705 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2706 extern ULONG ConsoleGraphicalResolutionListSize
;
2707 extern PVOID DspRemoteInputConsole
;
2708 extern PVOID DspLocalInputConsole
;
2709 extern WCHAR BlScratchBuffer
[8192];
2710 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated
;
2711 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated
;
2712 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker
;
2713 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2714 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated
;
2715 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated
;
2716 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory
;
2717 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory
;
2718 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory
;
2719 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory
;
2720 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual
;
2721 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers
;
2722 extern ULONGLONG BlpTimePerformanceFrequency
;
2723 extern LIST_ENTRY RegisteredFileSystems
;