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
226 } BL_MEMORY_DESCRIPTOR_TYPE
;
228 typedef enum _BL_TRANSLATION_TYPE
234 } BL_TRANSLATION_TYPE
;
236 typedef enum _BL_ARCH_MODE
245 typedef enum _BL_DEVICE_TYPE
248 LegacyPartitionDevice
= 2,
257 // Local Device Types
259 typedef enum _BL_LOCAL_DEVICE_TYPE
266 VirtualDiskDevice
= 6
267 } BL_LOCAL_DEVICE_TYPE
;
272 typedef enum _BL_PARTITION_TYPE
282 typedef enum _BL_PATH_TYPE
291 typedef enum _BL_MEMORY_CLASS
301 typedef enum _BL_MEMORY_TYPE
306 BlLoaderMemory
= 0xD0000002,
307 BlLoaderDeviceMemory
= 0xD0000004,
308 BlLoaderHeap
= 0xD0000005,
309 BlLoaderPageDirectory
= 0xD0000006,
310 BlLoaderReferencePage
= 0xD0000007,
311 BlLoaderRamDisk
= 0xD0000008,
312 BlLoaderArchData
= 0xD0000009,
313 BlLoaderData
= 0xD000000A,
314 BlLoaderRegistry
= 0xD000000B,
315 BlLoaderBlockMemory
= 0xD000000C,
316 BlLoaderSelfMap
= 0xD000000F,
319 // Application Memory
321 BlApplicationReserved
= 0xE0000001,
322 BlApplicationData
= 0xE0000004,
327 BlConventionalMemory
= 0xF0000001,
328 BlUnusableMemory
= 0xF0000002,
329 BlReservedMemory
= 0xF0000003,
330 BlEfiBootMemory
= 0xF0000004,
331 BlEfiRuntimeMemory
= 0xF0000006,
332 BlAcpiReclaimMemory
= 0xF0000008,
333 BlAcpiNvsMemory
= 0xF0000009,
334 BlDeviceIoMemory
= 0xF000000A,
335 BlDevicePortMemory
= 0xF000000B,
336 BlPalMemory
= 0xF000000C,
339 typedef enum _BL_MEMORY_ATTR
342 // Memory Caching Attributes
344 BlMemoryUncached
= 0x00000001,
345 BlMemoryWriteCombined
= 0x00000002,
346 BlMemoryWriteThrough
= 0x00000004,
347 BlMemoryWriteBack
= 0x00000008,
348 BlMemoryUncachedExported
= 0x00000010,
349 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
350 BlMemoryValidCacheAttributeMask
= 0x000000FF,
353 // Memory Protection Attributes
355 BlMemoryWriteProtected
= 0x00000100,
356 BlMemoryReadProtected
= 0x00000200,
357 BlMemoryExecuteProtected
= 0x00000400,
358 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
359 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
362 // Memory Allocation Attributes
364 BlMemoryUnknown
= 0x00010000,
365 BlMemoryNonFixed
= 0x00020000,
366 BlMemoryFixed
= 0x00040000,
367 BlMemoryBelow1MB
= 0x00080000,
368 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryBelow1MB
| BlMemoryUnknown
,
369 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
372 // Memory Type Attributes
374 BlMemoryRuntime
= 0x01000000,
375 BlMemoryCoalesced
= 0x02000000,
376 BlMemoryUpdate
= 0x04000000,
377 BlMemoryNonFirmware
= 0x08000000,
378 BlMemoryPersistent
= 0x10000000,
379 BlMemorySpecial
= 0x20000000,
380 BlMemoryFirmware
= 0x80000000,
381 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemoryPersistent
| BlMemorySpecial
| BlMemoryFirmware
,
382 BlMemoryValidTypeAttributeMask
= 0xFF000000,
385 /* CALLBACKS *****************************************************************/
387 struct _BL_FILE_ENTRY
;
388 struct _BL_FILE_INFORMATION
;
392 _In_
struct _BL_FILE_ENTRY
* Directory
,
393 _In_ PWCHAR FileName
,
395 _Out_
struct _BL_FILE_ENTRY
** FileEntry
401 _In_
struct _BL_FILE_ENTRY
* FileEntry
407 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
410 _Out_opt_ PULONG BytesRead
421 (*PBL_FILE_GET_NEXT
) (
427 (*PBL_FILE_GET_INFO
) (
428 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
429 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
434 (*PBL_FILE_SET_INFO
) (
435 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
436 _In_
struct _BL_FILE_INFORMATION
* FileInfo
441 (*PBL_FS_INIT_CALLBACK
) (
447 (*PBL_FS_DESTROY_CALLBACK
) (
453 (*PBL_FS_MOUNT_CALLBACK
) (
456 _Out_
struct _BL_FILE_ENTRY
** FileEntry
461 (*PBL_FS_PURGE_CALLBACK
) (
467 (*PBL_FILE_DESTROY_CALLBACK
) (
471 struct _BL_TEXT_CONSOLE
;
472 struct _BL_DISPLAY_STATE
;
473 struct _BL_DISPLAY_MODE
;
474 struct _BL_INPUT_CONSOLE
;
475 struct _BL_REMOTE_CONSOLE
;
476 struct _BL_GRAPHICS_CONSOLE
;
479 (*PCONSOLE_DESTRUCT
) (
480 _In_
struct _BL_TEXT_CONSOLE
* Console
485 (*PCONSOLE_REINITIALIZE
) (
486 _In_
struct _BL_TEXT_CONSOLE
* Console
491 (*PCONSOLE_GET_TEXT_STATE
) (
492 _In_
struct _BL_TEXT_CONSOLE
* Console
,
493 _Out_
struct _BL_DISPLAY_STATE
* TextState
498 (*PCONSOLE_SET_TEXT_STATE
) (
499 _In_
struct _BL_TEXT_CONSOLE
* Console
,
501 _In_
struct _BL_DISPLAY_STATE
* TextState
506 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
507 _In_
struct _BL_TEXT_CONSOLE
* Console
,
508 _Out_ PULONG TextResolution
513 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
514 _In_
struct _BL_TEXT_CONSOLE
* Console
,
515 _In_ ULONG NewTextResolution
,
516 _Out_ PULONG OldTextResolution
521 (*PCONSOLE_CLEAR_TEXT
) (
522 _In_
struct _BL_TEXT_CONSOLE
* Console
,
523 _In_ BOOLEAN LineOnly
528 (*PCONSOLE_IS_ENABLED
) (
529 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
534 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
535 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
536 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
541 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
542 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
543 _In_
struct _BL_DISPLAY_MODE DisplayMode
549 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
555 (*PCONSOLE_WRITE_TEXT
) (
556 _In_
struct _BL_TEXT_CONSOLE
* Console
,
563 (*PBL_TBL_LOOKUP_ROUTINE
) (
565 _In_ PVOID Argument1
,
566 _In_ PVOID Argument2
,
567 _In_ PVOID Argument3
,
573 (*PBL_TBL_MAP_ROUTINE
) (
575 _In_ ULONG EntryIndex
580 (*PBL_TBL_SET_ROUTINE
) (
586 (*PBL_IO_DESTROY_ROUTINE
) (
590 struct _BL_HASH_ENTRY
;
593 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
594 _In_
struct _BL_HASH_ENTRY
* Entry1
,
595 _In_
struct _BL_HASH_ENTRY
* Entry2
600 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
601 _In_
struct _BL_HASH_ENTRY
* Entry
,
605 struct _BL_DEVICE_ENTRY
;
606 struct _BL_DEVICE_DESCRIPTOR
;
607 struct _BL_DEVICE_INFORMATION
;
611 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
618 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
619 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
624 (*PBL_DEVICE_CLOSE
) (
625 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
631 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
634 _Out_ PULONG BytesRead
639 (*PBL_DEVICE_WRITE
) (
645 (*PBL_DEVICE_GET_INFORMATION
) (
646 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
647 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
652 (*PBL_DEVICE_SET_INFORMATION
) (
653 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
654 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
659 (*PBL_DEVICE_RESET
) (
665 (*PBL_DEVICE_FLUSH
) (
671 (*PBL_DEVICE_CREATE
) (
675 /* DATA STRUCTURES ***********************************************************/
677 typedef struct _BL_LIBRARY_PARAMETERS
680 ULONG TranslationType
;
681 ULONG MinimumAllocationCount
;
682 ULONG MinimumHeapSize
;
683 ULONG HeapAllocationAttributes
;
684 PWCHAR ApplicationBaseDirectory
;
685 ULONG DescriptorCount
;
686 PWCHAR FontBaseDirectory
;
687 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
689 /* This should eventually go into a more public header */
690 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
692 /* This header tells the library what image we're dealing with */
697 ULONG MemoryTranslationType
;
699 /* Where is the image located */
703 /* Offset to BL_MEMORY_DATA */
704 ULONG MemoryDataOffset
;
706 /* Offset to BL_APPLICATION_ENTRY */
707 ULONG AppEntryOffset
;
709 /* Offset to BL_DEVICE_DESCRPIPTOR */
710 ULONG BootDeviceOffset
;
712 /* Offset to BL_FIRMWARE_PARAMETERS */
713 ULONG FirmwareParametersOffset
;
715 /* Offset to BL_RETURN_ARGUMENTS */
716 ULONG ReturnArgumentsOffset
;
717 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
719 typedef struct _BL_MEMORY_DATA
723 ULONG DescriptorCount
;
724 ULONG DescriptorSize
;
725 ULONG DescriptorOffset
;
726 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
728 typedef struct _BL_FIRMWARE_DESCRIPTOR
732 EFI_HANDLE ImageHandle
;
733 EFI_SYSTEM_TABLE
*SystemTable
;
734 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
736 typedef struct _BL_RETURN_ARGUMENTS
743 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
745 typedef struct _BL_MEMORY_DESCRIPTOR
747 LIST_ENTRY ListEntry
;
753 ULONGLONG VirtualPage
;
757 ULONGLONG BaseAddress
;
758 ULONGLONG VirtualAddress
;
764 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
766 typedef struct _BL_BCD_OPTION
772 ULONG NextEntryOffset
;
774 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
776 typedef struct _BL_APPLICATION_ENTRY
782 BL_BCD_OPTION BcdData
;
783 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
785 typedef struct _BL_LOADED_APPLICATION_ENTRY
789 PBL_BCD_OPTION BcdData
;
790 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
792 typedef struct _BL_MENU_STATUS
799 ULONG AdvancedOptions
: 1;
800 ULONG BootOptions
: 1;
809 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
811 typedef enum _BL_BOOT_ERROR_STATUS
821 } BL_BOOT_ERROR_STATUS
;
823 typedef struct _BL_HARDDISK_DEVICE
830 ULONG PartitionSignature
;
835 GUID PartitionSignature
;
843 } BL_HARDDISK_DEVICE
;
845 typedef struct _BL_LOCAL_DEVICE
855 BL_HARDDISK_DEVICE HardDisk
;
859 PHYSICAL_ADDRESS ImageBase
;
860 LARGE_INTEGER ImageSize
;
864 ULONG File
; // unknown for now
866 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
868 typedef struct _BL_DEVICE_DESCRIPTOR
870 DEVICE_TYPE DeviceType
;
876 BL_LOCAL_DEVICE Local
;
887 ULONG PartitionNumber
;
895 BL_LOCAL_DEVICE Disk
;
898 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
900 typedef struct _BL_FILE_PATH_DESCRIPTOR
905 UCHAR Path
[ANYSIZE_ARRAY
];
906 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
908 typedef struct _BL_WINDOWS_LOAD_OPTIONS
914 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
915 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
917 typedef struct _BL_ARCH_CONTEXT
920 BL_TRANSLATION_TYPE TranslationType
;
922 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
924 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
930 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
932 typedef struct _BL_ADDRESS_RANGE
936 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
938 typedef struct _BL_FILE_INFORMATION
944 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
946 typedef struct _BL_FILE_CALLBACKS
949 PBL_FILE_CLOSE Close
;
951 PBL_FILE_WRITE Write
;
952 PBL_FILE_GET_NEXT GetNext
;
953 PBL_FILE_GET_INFO GetInfo
;
954 PBL_FILE_SET_INFO SetInfo
;
955 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
957 typedef struct _BL_FILE_ENTRY
963 ULONG ReferenceCount
;
965 ULONGLONG TotalBytesRead
;
967 BL_FILE_CALLBACKS Callbacks
;
968 PVOID FsSpecificData
;
969 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
971 typedef struct _BL_FILE_SYSTEM_ENTRY
973 LIST_ENTRY ListEntry
;
974 PBL_FS_INIT_CALLBACK InitCallback
;
975 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
976 PBL_FS_MOUNT_CALLBACK MountCallback
;
977 PBL_FS_PURGE_CALLBACK PurgeCallback
;
978 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
980 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
982 PBL_FS_INIT_CALLBACK Init
;
983 PBL_FS_DESTROY_CALLBACK Destroy
;
984 PBL_FS_MOUNT_CALLBACK Mount
;
985 PBL_FS_PURGE_CALLBACK Purge
;
986 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
988 typedef struct _BL_DISPLAY_STATE
995 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
997 typedef struct _BL_DISPLAY_MODE
1002 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
1004 typedef struct _BL_TEXT_CONSOLE_VTABLE
1006 PCONSOLE_DESTRUCT Destruct
;
1007 PCONSOLE_REINITIALIZE Reinitialize
;
1008 PCONSOLE_GET_TEXT_STATE GetTextState
;
1009 PCONSOLE_SET_TEXT_STATE SetTextState
;
1010 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
1011 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
1012 PCONSOLE_CLEAR_TEXT ClearText
;
1013 PCONSOLE_WRITE_TEXT WriteText
;
1014 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
1016 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
1018 BL_TEXT_CONSOLE_VTABLE Text
;
1019 PCONSOLE_IS_ENABLED IsEnabled
;
1020 PCONSOLE_ENABLE Enable
;
1021 PVOID GetConsoleResolution
;
1022 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
1023 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
1024 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
1025 /// more for graphics ///
1026 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1028 typedef struct _BL_TEXT_CONSOLE
1030 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1031 BL_DISPLAY_STATE State
;
1032 BL_DISPLAY_MODE DisplayMode
;
1034 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1036 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1037 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1039 typedef struct _BL_INPUT_CONSOLE_VTABLE
1041 PCONSOLE_DESTRUCT Destruct
;
1042 PCONSOLE_REINITIALIZE Reinitialize
;
1043 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1044 //PCONSOLE_READ_INPUT ReadInput;
1045 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1046 //PCONSOLE_FILL_BUFFER FillBuffer;
1047 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1049 typedef struct _BL_INPUT_CONSOLE
1051 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1056 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1058 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1062 } BL_GRAPHICS_CONSOLE_TYPE
;
1064 typedef struct _BL_GRAPHICS_CONSOLE
1066 BL_TEXT_CONSOLE TextConsole
;
1067 BL_DISPLAY_MODE DisplayMode
;
1071 BL_DISPLAY_MODE OldDisplayMode
;
1072 ULONG OldPixelDepth
;
1074 BL_GRAPHICS_CONSOLE_TYPE Type
;
1075 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1077 ULONG FrameBufferSize
;
1078 ULONG PixelsPerScanLine
;
1081 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1083 typedef struct _BL_REMOTE_CONSOLE
1085 BL_TEXT_CONSOLE TextConsole
;
1086 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1088 typedef struct _BL_HASH_TABLE
1090 PLIST_ENTRY HashLinks
;
1092 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1093 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1094 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1096 typedef struct _BL_HASH_ENTRY
1101 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1103 typedef struct _BL_HASH_VALUE
1107 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1109 typedef struct _BL_HASH_NODE
1111 LIST_ENTRY ListEntry
;
1112 BL_HASH_ENTRY Entry
;
1113 BL_HASH_VALUE Value
;
1114 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1116 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1118 BL_LOCAL_DEVICE_TYPE Type
;
1121 BL_PARTITION_TYPE PartitionType
;
1124 ULONGLONG LastBlock
;
1141 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1143 typedef struct _BL_DEVICE_INFORMATION
1145 BL_DEVICE_TYPE DeviceType
;
1148 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1150 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1152 typedef struct _BL_BLOCK_DEVICE
1154 BL_BLOCK_DEVICE_INFORMATION
;
1155 ULONGLONG StartOffset
;
1156 EFI_BLOCK_IO
* Protocol
;
1158 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1160 typedef struct _BL_PROTOCOL_HANDLE
1164 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1166 typedef struct _BL_DEVICE_CALLBACKS
1168 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1169 PBL_DEVICE_OPEN Open
;
1170 PBL_DEVICE_CLOSE Close
;
1171 PBL_DEVICE_READ Read
;
1172 PBL_DEVICE_WRITE Write
;
1173 PBL_DEVICE_GET_INFORMATION GetInformation
;
1174 PBL_DEVICE_SET_INFORMATION SetInformation
;
1175 PBL_DEVICE_RESET Reset
;
1176 PBL_DEVICE_FLUSH Flush
;
1177 PBL_DEVICE_CREATE Create
;
1178 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1180 typedef struct _BL_DEVICE_ENTRY
1185 ULONG ReferenceCount
;
1186 BL_DEVICE_CALLBACKS Callbacks
;
1187 PVOID DeviceSpecificData
;
1188 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1189 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1191 typedef struct _BL_IMG_FILE
1201 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1203 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1205 PBL_APPLICATION_ENTRY AppEntry
;
1208 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1210 typedef struct _BL_IMAGE_PARAMETERS
1215 } BL_IMAGE_PARAMETERS
, *PBL_IMAGE_PARAMETERS
;
1217 typedef struct _BL_DEFERRED_FONT_FILE
1219 LIST_ENTRY ListEntry
;
1221 PBL_DEVICE_DESCRIPTOR Device
;
1223 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1227 typedef struct _BMP_HEADER
1233 } BMP_HEADER
, *PBMP_HEADER
;
1235 typedef struct _DIB_HEADER
1244 ULONG XPelsPerMeter
;
1245 ULONG YPelsPerMEter
;
1248 } DIB_HEADER
, *PDIB_HEADER
;
1250 typedef struct _BITMAP
1252 BMP_HEADER BmpHeader
;
1253 DIB_HEADER DibHeader
;
1257 typedef struct _COORD
1263 typedef struct _BL_PD_DATA_BLOB
1268 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1270 /* INLINE ROUTINES ***********************************************************/
1274 BlSetupDefaultParameters (
1275 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1278 BL_LIBRARY_PARAMETERS DefaultParameters
=
1290 /* Copy the defaults */
1291 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1296 MmMdInitializeListHead (
1297 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1300 /* Initialize the list */
1301 InitializeListHead(&List
->ListHead
);
1302 List
->First
= &List
->ListHead
;
1307 /* INITIALIZATION ROUTINES ***************************************************/
1310 BlInitializeLibrary(
1311 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1312 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1323 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1328 _In_ PBL_MEMORY_DATA MemoryData
,
1329 _In_ BL_TRANSLATION_TYPE TranslationType
,
1330 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1340 _In_ PBL_MEMORY_DATA MemoryData
,
1341 _In_ ULONG MinimumPages
1347 _In_ PBL_MEMORY_DATA MemoryData
,
1348 _In_ BL_TRANSLATION_TYPE TranslationType
,
1349 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1354 _In_ ULONG HeapSize
,
1355 _In_ ULONG HeapAttributes
1361 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1365 BlpDeviceInitialize (
1380 BlpDisplayInitialize (
1385 BlpDisplayReinitialize (
1399 /* FIRMWARE ROUTINES *********************************************************/
1409 _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
1413 BlFwEnumerateDevice (
1414 _In_ PBL_DEVICE_DESCRIPTOR Device
1421 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1426 _In_ ULONG StallTime
1440 EfiConOutOutputString (
1441 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1446 EfiConOutQueryMode (
1447 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1449 _In_ UINTN
* Columns
,
1455 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1460 EfiConOutReadCurrentMode (
1461 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1462 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1466 EfiConOutSetAttribute (
1467 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1468 _In_ ULONG Attribute
1472 EfiConOutSetCursorPosition (
1473 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1479 EfiConOutEnableCursor (
1480 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1481 _In_ BOOLEAN Visible
1485 EfiLocateHandleBuffer (
1486 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1487 _In_ EFI_GUID
*Protocol
,
1488 _Inout_ PULONG HandleCount
,
1489 _Inout_ EFI_HANDLE
** Buffer
1494 _In_ EFI_HANDLE Handle
,
1495 _In_ EFI_GUID
*Protocol
,
1496 _Out_ PVOID
* Interface
1501 _In_ EFI_HANDLE Handle
,
1502 _In_ EFI_GUID
*Protocol
1506 EfiGopGetCurrentMode (
1507 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1509 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1514 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1519 EfiGopGetFrameBuffer (
1520 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1521 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1522 _Out_ UINTN
*FrameBufferSize
1527 _In_ EFI_RESET_TYPE ResetType
1532 _In_ EFI_DEVICE_PATH
*DevicePath
1536 EfiIsDevicePathParent (
1537 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1538 _In_ EFI_DEVICE_PATH
*DevicePath2
1543 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1549 _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
1552 /* PLATFORM TIMER ROUTINES ***************************************************/
1555 BlpTimeCalibratePerformanceCounter (
1560 BlTimeQueryPerformanceCounter (
1561 _Out_opt_ PLARGE_INTEGER Frequency
1564 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1567 BlpDisplayRegisterLocale (
1571 /* FONT ROUTINES *************************************************************/
1574 BfiFreeDeferredFontFile (
1575 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1580 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1581 _In_ PWCHAR FontPath
1585 BfLoadDeferredFontFiles (
1591 _In_ PBL_GRAPHICS_CONSOLE Console
1595 BfClearToEndOfLine (
1596 _In_ PBL_GRAPHICS_CONSOLE Console
1599 /* FILESYSTEM ROUTINES *******************************************************/
1608 _In_ ULONG DeviceId
,
1610 _Out_ PBL_FILE_ENTRY
* FileEntry
1620 _In_ ULONG DeviceId
,
1622 _Out_ PBL_FILE_ENTRY
* FileEntry
1625 /* DEBUG ROUTINES ************************************************************/
1629 BlBdDebuggerEnabled (
1634 BlBdPullRemoteFile (
1635 _In_ PWCHAR FilePath
,
1636 _Out_ PVOID BaseAddress
,
1637 _Out_ PULONGLONG FileSize
1648 _In_ ULONG ErrorCode
,
1649 _In_ ULONG Parameter1
,
1650 _In_ ULONG_PTR Parameter2
,
1651 _In_ ULONG_PTR Parameter3
,
1652 _In_ ULONG_PTR Parameter4
1655 /* UTILITY ROUTINES **********************************************************/
1658 BlUtlUpdateProgress (
1659 _In_ ULONG Percentage
,
1660 _Out_opt_ PBOOLEAN Completed
1665 _Out_ PVOID
* TableAddress
,
1666 _In_ ULONG Signature
1675 BlUtlRegisterProgressRoutine (
1681 _In_ ULONG PartialSum
,
1688 BlGetApplicationBaseAndSize (
1689 _Out_ PVOID
* ImageBase
,
1690 _Out_ PULONG ImageSize
1694 BlDestroyBootEntry (
1695 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1700 _In_
const GUID
* DataGuid
,
1702 _Inout_ PBL_PD_DATA_BLOB DataBlob
1705 /* FIRMWARE UTILITY ROUTINES *************************************************/
1708 EfiGetEfiStatusCode(
1709 _In_ NTSTATUS Status
1713 EfiGetNtStatusCode (
1714 _In_ EFI_STATUS EfiStatus
1724 _In_ ULONG BasePage
,
1725 _In_ ULONG PageCount
1729 BlGetApplicationIdentifier (
1734 BlpSecureBootEFIIsEnabled (
1739 BlSecureBootIsEnabled (
1740 _Out_ PBOOLEAN SecureBootEnabled
1744 BlSecureBootCheckForFactoryReset (
1748 /* RESOURCE ROUTINES *********************************************************/
1751 BlResourceFindMessage (
1756 BlResourceFindHtml (
1761 BlpResourceInitialize (
1765 /* TABLE ROUTINES ************************************************************/
1771 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1778 _Out_ PULONG EntryIndex
,
1779 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1780 _In_ PVOID Argument1
,
1781 _In_ PVOID Argument2
,
1782 _In_ PVOID Argument3
,
1783 _In_ PVOID Argument4
1788 _Inout_ PVOID
** Table
,
1789 _Inout_ PULONG Count
,
1791 _Out_ PULONG EntryIndex
,
1792 _In_ PBL_TBL_SET_ROUTINE Callback
1796 TblDoNotPurgeEntry (
1800 /* HASH TABLE ROUTINES *******************************************************/
1805 _In_ PBL_HASH_ENTRY Entry
,
1813 _In_ PBL_HASH_ENTRY Entry
,
1814 _Out_ PBL_HASH_VALUE
*Value
1820 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1821 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1825 /* BCD OPTION ROUTINES *******************************************************/
1829 _In_ PBL_BCD_OPTION List
,
1834 BlGetBootOptionListSize (
1835 _In_ PBL_BCD_OPTION BcdOption
1839 BlGetBootOptionSize (
1840 _In_ PBL_BCD_OPTION BcdOption
1844 BlGetBootOptionString (
1845 _In_ PBL_BCD_OPTION List
,
1851 BlGetBootOptionInteger (
1852 _In_ PBL_BCD_OPTION List
,
1854 _Out_ PULONGLONG Value
1858 BlGetBootOptionBoolean (
1859 _In_ PBL_BCD_OPTION List
,
1861 _Out_ PBOOLEAN Value
1865 BlpGetBootOptionIntegerList (
1866 _In_ PBL_BCD_OPTION List
,
1868 _Out_ PULONGLONG
* Value
,
1869 _Out_ PULONGLONG Count
,
1874 BlGetBootOptionDevice (
1875 _In_ PBL_BCD_OPTION List
,
1877 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1878 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1882 BlGetBootOptionGuid (
1883 _In_ PBL_BCD_OPTION List
,
1889 BlGetBootOptionGuidList (
1890 _In_ PBL_BCD_OPTION List
,
1898 _In_ PBL_BCD_OPTION OptionList
,
1899 _Out_ PBL_BCD_OPTION
*CopiedOptions
1903 BlAppendBootOptionBoolean (
1904 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1909 BlAppendBootOptionInteger (
1910 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1911 _In_ ULONG OptionId
,
1912 _In_ ULONGLONG Value
1916 BlAppendBootOptionString (
1917 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1918 _In_ PWCHAR OptionString
1922 BlAppendBootOptions (
1923 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1924 _In_ PBL_BCD_OPTION Options
1928 BlRemoveBootOption (
1929 _In_ PBL_BCD_OPTION List
,
1934 BlReplaceBootOptions (
1935 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1936 _In_ PBL_BCD_OPTION NewOptions
1939 /* BOOT REGISTRY ROUTINES ****************************************************/
1943 _In_ HANDLE KeyHandle
1948 _In_ HANDLE ParentHandle
,
1949 _In_ PWCHAR KeyName
,
1950 _Out_ PHANDLE Handle
1955 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1956 _Out_ PHANDLE HiveHandle
1960 BiGetRegistryValue (
1961 _In_ HANDLE KeyHandle
,
1962 _In_ PWCHAR ValueName
,
1964 _Out_ PVOID
* Buffer
,
1965 _Out_ PULONG ValueLength
1969 BiEnumerateSubKeys (
1970 _In_ HANDLE KeyHandle
,
1971 _Out_ PWCHAR
** SubKeyList
,
1972 _Out_ PULONG SubKeyCount
1977 _In_ HANDLE KeyHandle
1982 _In_ HANDLE KeyHandle
1985 /* CONTEXT ROUTINES **********************************************************/
1988 BlpArchSwitchContext (
1989 _In_ BL_ARCH_MODE NewMode
1993 Archx86TransferTo32BitApplicationAsm (
1997 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
2000 MmMdInitializeList (
2001 _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList
,
2003 _In_ PLIST_ENTRY ListHead
2006 PBL_MEMORY_DESCRIPTOR
2007 MmMdFindDescriptor (
2008 _In_ ULONG WhichList
,
2013 PBL_MEMORY_DESCRIPTOR
2014 MmMdFindDescriptorFromMdl (
2015 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2022 _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList
,
2023 _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList
,
2024 _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor
,
2025 _Out_ PULONG ActualCount
,
2032 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2037 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2040 PBL_MEMORY_DESCRIPTOR
2041 MmMdInitByteGranularDescriptor (
2043 _In_ BL_MEMORY_TYPE Type
,
2044 _In_ ULONGLONG BasePage
,
2045 _In_ ULONGLONG VirtualPage
,
2046 _In_ ULONGLONG PageCount
2050 MmMdFreeGlobalDescriptors (
2055 MmMdAddDescriptorToList (
2056 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2057 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
2062 MmMdRemoveDescriptorFromList (
2063 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2064 _In_ PBL_MEMORY_DESCRIPTOR Entry
2068 MmMdFindSatisfyingRegion (
2069 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
2070 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
2071 _In_ ULONGLONG Pages
,
2072 _In_ PBL_ADDRESS_RANGE BaseRange
,
2073 _In_ PBL_ADDRESS_RANGE VirtualRange
,
2074 _In_ BOOLEAN TopDown
,
2075 _In_ BL_MEMORY_TYPE MemoryType
,
2077 _In_ ULONG Alignment
2081 MmMdRemoveRegionFromMdlEx (
2082 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2084 __in ULONGLONG BasePage
,
2085 __in ULONGLONG PageCount
,
2086 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2090 MmMdFreeDescriptor (
2091 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2094 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2097 BlMmAllocatePhysicalPages(
2098 _Inout_ PPHYSICAL_ADDRESS Address
,
2099 _In_ BL_MEMORY_TYPE MemoryType
,
2100 _In_ ULONGLONG PageCount
,
2101 _In_ ULONG Attributes
,
2102 _In_ ULONG Alignment
2106 MmPapAllocatePhysicalPagesInRange (
2107 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2108 _In_ BL_MEMORY_TYPE MemoryType
,
2109 _In_ ULONGLONG Pages
,
2110 _In_ ULONG Attributes
,
2111 _In_ ULONG Alignment
,
2112 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2113 _In_opt_ PBL_ADDRESS_RANGE Range
,
2114 _In_ ULONG RangeType
2118 BlMmFreePhysicalPages (
2119 _In_ PHYSICAL_ADDRESS Address
2125 _In_ ULONG WhichList
2129 MmPapAllocatePagesInRange (
2130 _Inout_ PVOID
* PhysicalAddress
,
2131 _In_ BL_MEMORY_TYPE MemoryType
,
2132 _In_ ULONGLONG Pages
,
2133 _In_ ULONG Attributes
,
2134 _In_ ULONG Alignment
,
2135 _In_opt_ PBL_ADDRESS_RANGE Range
,
2141 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2146 BlpMmInitializeConstraints (
2151 BlMmRemoveBadMemory (
2157 _In_ PLIST_ENTRY MemoryMap
,
2158 _In_ PBL_IMAGE_PARAMETERS MemoryParameters
,
2159 _In_ ULONG WhichTypes
,
2163 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2166 BlMmMapPhysicalAddressEx (
2167 _In_ PVOID
* VirtualAddress
,
2168 _In_ ULONG Attributes
,
2169 _In_ ULONGLONG Size
,
2170 _In_ PHYSICAL_ADDRESS PhysicalAddress
2174 BlMmUnmapVirtualAddressEx (
2175 _In_ PVOID VirtualAddress
,
2180 BlMmTranslateVirtualAddress (
2181 _In_ PVOID VirtualAddress
,
2182 _Out_ PPHYSICAL_ADDRESS PhysicalAddress
2186 MmArchTranslateVirtualAddress (
2187 _In_ PVOID VirtualAddress
,
2188 _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress
,
2189 _Out_opt_ PULONG CachingFlags
2192 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2195 BlpMmCreateBlockAllocator (
2199 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2211 /* DISPLAY ROUTINES **********************************************************/
2214 BlDisplayGetTextCellResolution (
2215 _Out_ PULONG TextWidth
,
2216 _Out_ PULONG TextHeight
2220 BlDisplaySetScreenResolution (
2225 BlDisplayGetScreenResolution (
2231 BlDisplayInvalidateOemBitmap (
2236 BlDisplayGetOemBitmap (
2237 _Out_ PCOORD Offset
,
2238 _Out_opt_ PULONG Flags
2242 BlDisplayValidOemBitmap (
2247 BlDisplayClearScreen (
2252 BlDisplaySetCursorType (
2256 /* I/O ROUTINES **************************************************************/
2259 BlpIoRegisterDestroyRoutine (
2260 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2270 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2273 _Out_ PULONG DeviceId
2277 BlDeviceGetInformation (
2278 _In_ ULONG DeviceId
,
2279 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2283 BlDeviceSetInformation (
2284 _In_ ULONG DeviceId
,
2285 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2289 BlDeviceReadAtOffset (
2290 _In_ ULONG DeviceId
,
2292 _In_ ULONGLONG Offset
,
2294 _Out_ PULONG BytesRead
2297 /* IMAGE ROUTINES ************************************************************/
2300 BlImgLoadImageWithProgress2 (
2301 _In_ ULONG DeviceId
,
2302 _In_ BL_MEMORY_TYPE MemoryType
,
2303 _In_ PWCHAR FileName
,
2304 _Inout_ PVOID
* MappedBase
,
2305 _Inout_ PULONG MappedSize
,
2306 _In_ ULONG ImageFlags
,
2307 _In_ BOOLEAN ShowProgress
,
2308 _Out_opt_ PUCHAR
* HashBuffer
,
2309 _Out_opt_ PULONG HashSize
2312 PIMAGE_SECTION_HEADER
2314 _In_ PVOID ImageBase
,
2315 _In_ ULONG ImageSize
2319 BlImgLoadBootApplication (
2320 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2321 _Out_ PULONG AppHandle
2325 BlImgStartBootApplication (
2326 _In_ ULONG AppHandle
,
2327 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2331 BlImgUnloadBootApplication (
2332 _In_ ULONG AppHandle
2336 BlImgQueryCodeIntegrityBootOptions (
2337 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2338 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2339 _Out_ PBOOLEAN TestSigning
2342 /* FILE I/O ROUTINES *********************************************************/
2350 BlFileReadAtOffsetEx (
2353 _In_ ULONGLONG ByteOffset
,
2355 _Out_ PULONG BytesReturned
,
2360 BlFileGetInformation (
2362 _In_ PBL_FILE_INFORMATION FileInfo
2367 _In_ ULONG DeviceId
,
2368 _In_ PWCHAR FileName
,
2373 /* BLOCK I/O ROUTINES *******************************************************/
2376 BlockIoEfiCompareDevice (
2377 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2378 _In_ EFI_HANDLE Handle
2381 /* INPUT CONSOLE ROUTINES ****************************************************/
2384 ConsoleInputLocalDestruct (
2385 _In_
struct _BL_INPUT_CONSOLE
* Console
2389 ConsoleInputBaseReinitialize (
2390 _In_
struct _BL_INPUT_CONSOLE
* Console
2394 ConsoleCreateLocalInputCnsole (
2398 /* TEXT CONSOLE ROUTINES *****************************************************/
2401 ConsoleGraphicalDestruct (
2402 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2406 ConsoleGraphicalClearText (
2407 _In_ PBL_GRAPHICS_CONSOLE Console
,
2408 _In_ BOOLEAN LineOnly
2412 ConsoleGraphicalClearPixels (
2413 _In_ PBL_GRAPHICS_CONSOLE Console
,
2418 ConsoleGraphicalReinitialize (
2419 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2423 ConsoleGraphicalSetTextState (
2424 _In_ PBL_GRAPHICS_CONSOLE Console
,
2426 _In_ PBL_DISPLAY_STATE TextState
2430 ConsoleGraphicalIsEnabled (
2431 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2435 ConsoleGraphicalGetGraphicalResolution (
2436 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2437 _In_ PBL_DISPLAY_MODE DisplayMode
2441 ConsoleGraphicalGetOriginalResolution (
2442 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2443 _In_ PBL_DISPLAY_MODE DisplayMode
2447 ConsoleGraphicalEnable (
2448 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2453 ConsoleTextLocalDestruct (
2454 _In_
struct _BL_TEXT_CONSOLE
* Console
2458 ConsoleTextLocalReinitialize (
2459 _In_
struct _BL_TEXT_CONSOLE
* Console
2463 ConsoleTextBaseGetTextState (
2464 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2465 _Out_ PBL_DISPLAY_STATE TextState
2469 ConsoleTextLocalSetTextState (
2470 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2472 _In_ PBL_DISPLAY_STATE TextState
2476 ConsoleTextBaseGetTextResolution (
2477 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2478 _Out_ PULONG TextResolution
2482 ConsoleTextLocalSetTextResolution (
2483 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2484 _In_ ULONG NewTextResolution
,
2485 _Out_ PULONG OldTextResolution
2489 ConsoleTextLocalClearText (
2490 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2491 _In_ BOOLEAN LineOnly
2495 ConsoleTextLocalWriteText (
2496 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2498 _In_ ULONG Attribute
2502 ConsoleTextLocalConstruct (
2503 _In_ PBL_TEXT_CONSOLE TextConsole
,
2504 _In_ BOOLEAN Activate
2508 ConsolepFindResolution (
2509 _In_ PBL_DISPLAY_MODE Mode
,
2510 _In_ PBL_DISPLAY_MODE List
,
2515 ConsoleFirmwareTextClear (
2516 _In_ PBL_TEXT_CONSOLE Console
,
2517 _In_ BOOLEAN LineOnly
2521 ConsoleFirmwareTextClose (
2522 _In_ PBL_TEXT_CONSOLE TextConsole
2526 ConsoleFirmwareTextOpen (
2527 _In_ PBL_TEXT_CONSOLE TextConsole
2531 ConsoleFirmwareTextSetState (
2532 _In_ PBL_TEXT_CONSOLE TextConsole
,
2534 _In_ PBL_DISPLAY_STATE State
2538 ConsoleGraphicalConstruct (
2539 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2543 ConsoleCreateRemoteConsole (
2544 _In_ PBL_TEXT_CONSOLE
* TextConsole
2548 ConsoleEfiGraphicalOpenProtocol (
2549 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2550 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2554 ConsoleFirmwareGraphicalClose (
2555 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2559 ConsoleFirmwareGraphicalDisable (
2560 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2564 ConsoleFirmwareGraphicalClear (
2565 _In_ PBL_GRAPHICS_CONSOLE Console
,
2570 ConsoleFirmwareGraphicalEnable (
2571 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2576 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2580 ConsoleEfiUgaClose (
2581 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2585 ConsoleEfiGopClose (
2586 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2591 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2595 ConsoleEfiGopEnable (
2596 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2600 ConsoleEfiUgaSetResolution (
2601 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2602 _In_ PBL_DISPLAY_MODE DisplayMode
,
2603 _In_ ULONG DisplayModeCount
2607 ConsoleCreateLocalInputConsole (
2612 ConsoleInputLocalEraseBuffer (
2613 _In_ PBL_INPUT_CONSOLE Console
,
2614 _In_opt_ PULONG ValueToFill
2618 ConsolepClearBuffer (
2619 _In_ PUCHAR FrameBuffer
,
2621 _In_ PUCHAR FillColor
,
2623 _In_ ULONG ScanlineWidth
,
2624 _In_ ULONG PixelDepth
2628 ConsolepConvertColorToPixel (
2629 _In_ BL_COLOR Color
,
2633 extern ULONG MmDescriptorCallTreeCount
;
2634 extern ULONG BlpApplicationFlags
;
2635 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2636 extern BL_TRANSLATION_TYPE MmTranslationType
;
2637 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2638 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2639 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2640 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2641 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2642 extern EFI_GUID EfiGraphicsOutputProtocol
;
2643 extern EFI_GUID EfiUgaDrawProtocol
;
2644 extern EFI_GUID EfiLoadedImageProtocol
;
2645 extern EFI_GUID EfiDevicePathProtocol
;
2646 extern EFI_GUID EfiBlockIoProtocol
;
2647 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2648 extern EFI_GUID EfiRootAcpiTableGuid
;
2649 extern EFI_GUID EfiRootAcpiTable10Guid
;
2650 extern EFI_GUID EfiGlobalVariable
;
2651 extern ULONG ConsoleGraphicalResolutionListFlags
;
2652 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2653 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2654 extern ULONG ConsoleGraphicalResolutionListSize
;
2655 extern PVOID DspRemoteInputConsole
;
2656 extern PVOID DspLocalInputConsole
;
2657 extern WCHAR BlScratchBuffer
[8192];
2658 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated
;
2659 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated
;
2660 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker
;
2661 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2662 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated
;
2663 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated
;
2664 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory
;
2665 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory
;
2666 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory
;
2667 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory
;
2668 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual
;
2669 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers
;
2670 extern ULONGLONG BlpTimePerformanceFrequency
;
2671 extern LIST_ENTRY RegisteredFileSystems
;