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_VIRTUAL_REGION_FLAG 0x80000000
127 #define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
128 #define BL_LIBRARY_FLAG_REINITIALIZE 0x02
129 #define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
130 #define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
131 #define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
132 #define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
134 #define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
135 #define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
137 #define BL_HT_VALUE_IS_INLINE 0x01
139 #define BL_FS_REGISTER_AT_HEAD_FLAG 1
141 #define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
142 #define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
143 #define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
145 #define BL_MEMORY_CLASS_SHIFT 28
147 #define BL_FILE_READ_ACCESS 0x01
148 #define BL_FILE_WRITE_ACCESS 0x02
149 #define BL_DIRECTORY_ACCESS 0x04
150 #define BL_UNKNOWN_ACCESS 0x10
152 #define BL_DEVICE_READ_ACCESS 0x01
153 #define BL_DEVICE_WRITE_ACCESS 0x02
155 #define BL_DEVICE_ENTRY_OPENED 0x01
156 #define BL_DEVICE_ENTRY_READ_ACCESS 0x02
157 #define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
159 #define BL_FILE_ENTRY_OPENED 0x01
160 #define BL_FILE_ENTRY_READ_ACCESS 0x02
161 #define BL_FILE_ENTRY_WRITE_ACCESS 0x04
162 #define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
163 #define BL_FILE_ENTRY_DIRECTORY 0x10000
165 #define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
167 #define BL_IMG_VALID_FILE 0x01
168 #define BL_IMG_MEMORY_FILE 0x02
169 #define BL_IMG_REMOTE_FILE 0x04
171 #define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
172 #define BL_LOAD_IMG_EXISTING_BUFFER 0x04
173 #define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
174 #define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
175 #define BL_LOAD_IMG_COMPUTE_HASH 0x40000
177 #define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
178 #define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
179 #define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
180 #define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
181 #define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
182 #define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
183 #define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
184 #define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
185 #define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
187 #define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
188 #define BL_UTL_CHECKSUM_ROTATE 0x20000
189 #define BL_UTL_CHECKSUM_NEGATE 0x40000
190 #define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
191 #define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
193 /* ENUMERATIONS **************************************************************/
195 typedef enum _BL_COLOR
213 } BL_COLOR
, *PBL_COLOR
;
215 typedef enum _BL_MENU_POLICY
217 MenuPolicyLegacy
= 0,
218 MenuPolicyStandard
= 1
221 typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
225 } BL_MEMORY_DESCRIPTOR_TYPE
;
227 typedef enum _BL_TRANSLATION_TYPE
233 } BL_TRANSLATION_TYPE
;
235 typedef enum _BL_ARCH_MODE
244 typedef enum _BL_DEVICE_TYPE
247 LegacyPartitionDevice
= 2,
256 // Local Device Types
258 typedef enum _BL_LOCAL_DEVICE_TYPE
265 VirtualDiskDevice
= 6
266 } BL_LOCAL_DEVICE_TYPE
;
271 typedef enum _BL_PARTITION_TYPE
281 typedef enum _BL_PATH_TYPE
290 typedef enum _BL_MEMORY_CLASS
300 typedef enum _BL_MEMORY_TYPE
305 BlLoaderMemory
= 0xD0000002,
306 BlLoaderDeviceMemory
= 0xD0000004,
307 BlLoaderHeap
= 0xD0000005,
308 BlLoaderPageDirectory
= 0xD0000006,
309 BlLoaderReferencePage
= 0xD0000007,
310 BlLoaderRamDisk
= 0xD0000008,
311 BlLoaderArchData
= 0xD0000009,
312 BlLoaderData
= 0xD000000A,
313 BlLoaderRegistry
= 0xD000000B,
314 BlLoaderBlockMemory
= 0xD000000C,
315 BlLoaderSelfMap
= 0xD000000F,
318 // Application Memory
320 BlApplicationReserved
= 0xE0000001,
321 BlApplicationData
= 0xE0000004,
326 BlConventionalMemory
= 0xF0000001,
327 BlUnusableMemory
= 0xF0000002,
328 BlReservedMemory
= 0xF0000003,
329 BlEfiBootMemory
= 0xF0000004,
330 BlEfiRuntimeMemory
= 0xF0000006,
331 BlAcpiReclaimMemory
= 0xF0000008,
332 BlAcpiNvsMemory
= 0xF0000009,
333 BlDeviceIoMemory
= 0xF000000A,
334 BlDevicePortMemory
= 0xF000000B,
335 BlPalMemory
= 0xF000000C,
338 typedef enum _BL_MEMORY_ATTR
341 // Memory Caching Attributes
343 BlMemoryUncached
= 0x00000001,
344 BlMemoryWriteCombined
= 0x00000002,
345 BlMemoryWriteThrough
= 0x00000004,
346 BlMemoryWriteBack
= 0x00000008,
347 BlMemoryUncachedExported
= 0x00000010,
348 BlMemoryValidCacheAttributes
= BlMemoryUncached
| BlMemoryWriteCombined
| BlMemoryWriteThrough
| BlMemoryWriteBack
| BlMemoryUncachedExported
,
349 BlMemoryValidCacheAttributeMask
= 0x000000FF,
352 // Memory Protection Attributes
354 BlMemoryWriteProtected
= 0x00000100,
355 BlMemoryReadProtected
= 0x00000200,
356 BlMemoryExecuteProtected
= 0x00000400,
357 BlMemoryValidProtectionAttributes
= BlMemoryWriteProtected
| BlMemoryReadProtected
| BlMemoryExecuteProtected
,
358 BlMemoryValidProtectionAttributeMask
= 0x0000FF00,
361 // Memory Allocation Attributes
363 BlMemoryUnknown
= 0x00010000,
364 BlMemoryNonFixed
= 0x00020000,
365 BlMemoryFixed
= 0x00040000,
366 BlMemoryReserved
= 0x00080000,
367 BlMemoryValidAllocationAttributes
= BlMemoryNonFixed
| BlMemoryFixed
| BlMemoryReserved
| BlMemoryUnknown
,
368 BlMemoryValidAllocationAttributeMask
= 0x00FF0000,
371 // Memory Type Attributes
373 BlMemoryRuntime
= 0x01000000,
374 BlMemoryCoalesced
= 0x02000000,
375 BlMemoryUpdate
= 0x04000000,
376 BlMemoryNonFirmware
= 0x08000000,
377 BlMemorySpecial
= 0x20000000,
378 BlMemoryFirmware
= 0x80000000,
379 BlMemoryValidTypeAttributes
= BlMemoryRuntime
| BlMemoryCoalesced
| BlMemoryUpdate
| BlMemoryNonFirmware
| BlMemorySpecial
| BlMemoryFirmware
,
380 BlMemoryValidTypeAttributeMask
= 0xFF000000,
383 /* CALLBACKS *****************************************************************/
385 struct _BL_FILE_ENTRY
;
386 struct _BL_FILE_INFORMATION
;
390 _In_
struct _BL_FILE_ENTRY
* Directory
,
391 _In_ PWCHAR FileName
,
393 _Out_
struct _BL_FILE_ENTRY
** FileEntry
399 _In_
struct _BL_FILE_ENTRY
* FileEntry
405 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
408 _Out_opt_ PULONG BytesRead
419 (*PBL_FILE_GET_NEXT
) (
425 (*PBL_FILE_GET_INFO
) (
426 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
427 _Out_
struct _BL_FILE_INFORMATION
* FileInfo
432 (*PBL_FILE_SET_INFO
) (
433 _In_
struct _BL_FILE_ENTRY
* FileEntry
,
434 _In_
struct _BL_FILE_INFORMATION
* FileInfo
439 (*PBL_FS_INIT_CALLBACK
) (
445 (*PBL_FS_DESTROY_CALLBACK
) (
451 (*PBL_FS_MOUNT_CALLBACK
) (
454 _Out_
struct _BL_FILE_ENTRY
** FileEntry
459 (*PBL_FS_PURGE_CALLBACK
) (
465 (*PBL_FILE_DESTROY_CALLBACK
) (
469 struct _BL_TEXT_CONSOLE
;
470 struct _BL_DISPLAY_STATE
;
471 struct _BL_DISPLAY_MODE
;
472 struct _BL_INPUT_CONSOLE
;
473 struct _BL_REMOTE_CONSOLE
;
474 struct _BL_GRAPHICS_CONSOLE
;
477 (*PCONSOLE_DESTRUCT
) (
478 _In_
struct _BL_TEXT_CONSOLE
* Console
483 (*PCONSOLE_REINITIALIZE
) (
484 _In_
struct _BL_TEXT_CONSOLE
* Console
489 (*PCONSOLE_GET_TEXT_STATE
) (
490 _In_
struct _BL_TEXT_CONSOLE
* Console
,
491 _Out_
struct _BL_DISPLAY_STATE
* TextState
496 (*PCONSOLE_SET_TEXT_STATE
) (
497 _In_
struct _BL_TEXT_CONSOLE
* Console
,
499 _In_
struct _BL_DISPLAY_STATE
* TextState
504 (*PCONSOLE_GET_TEXT_RESOLUTION
) (
505 _In_
struct _BL_TEXT_CONSOLE
* Console
,
506 _Out_ PULONG TextResolution
511 (*PCONSOLE_SET_TEXT_RESOLUTION
) (
512 _In_
struct _BL_TEXT_CONSOLE
* Console
,
513 _In_ ULONG NewTextResolution
,
514 _Out_ PULONG OldTextResolution
519 (*PCONSOLE_CLEAR_TEXT
) (
520 _In_
struct _BL_TEXT_CONSOLE
* Console
,
521 _In_ BOOLEAN LineOnly
526 (*PCONSOLE_IS_ENABLED
) (
527 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
532 (*PCONSOLE_GET_GRAPHICAL_RESOLUTION
) (
533 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
534 _Out_
struct _BL_DISPLAY_MODE
* DisplayMode
539 (*PCONSOLE_SET_GRAPHICAL_RESOLUTION
) (
540 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
541 _In_
struct _BL_DISPLAY_MODE DisplayMode
547 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
553 (*PCONSOLE_WRITE_TEXT
) (
554 _In_
struct _BL_TEXT_CONSOLE
* Console
,
561 (*PBL_TBL_LOOKUP_ROUTINE
) (
563 _In_ PVOID Argument1
,
564 _In_ PVOID Argument2
,
565 _In_ PVOID Argument3
,
571 (*PBL_TBL_MAP_ROUTINE
) (
573 _In_ ULONG EntryIndex
578 (*PBL_TBL_SET_ROUTINE
) (
584 (*PBL_IO_DESTROY_ROUTINE
) (
588 struct _BL_HASH_ENTRY
;
591 (*PBL_HASH_TABLE_COMPARE_FUNCTION
) (
592 _In_
struct _BL_HASH_ENTRY
* Entry1
,
593 _In_
struct _BL_HASH_ENTRY
* Entry2
598 (*PBL_HASH_TABLE_HASH_FUNCTION
) (
599 _In_
struct _BL_HASH_ENTRY
* Entry
,
603 struct _BL_DEVICE_ENTRY
;
604 struct _BL_DEVICE_DESCRIPTOR
;
605 struct _BL_DEVICE_INFORMATION
;
609 (*PBL_DEVICE_ENUMERATE_DEVICE_CLASS
) (
616 _In_
struct _BL_DEVICE_DESCRIPTOR
* Device
,
617 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
622 (*PBL_DEVICE_CLOSE
) (
623 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
629 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
632 _Out_ PULONG BytesRead
637 (*PBL_DEVICE_WRITE
) (
643 (*PBL_DEVICE_GET_INFORMATION
) (
644 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
645 _Out_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
650 (*PBL_DEVICE_SET_INFORMATION
) (
651 _In_
struct _BL_DEVICE_ENTRY
* DeviceEntry
,
652 _In_
struct _BL_DEVICE_INFORMATION
* DeviceInformation
657 (*PBL_DEVICE_RESET
) (
663 (*PBL_DEVICE_FLUSH
) (
669 (*PBL_DEVICE_CREATE
) (
673 /* DATA STRUCTURES ***********************************************************/
675 typedef struct _BL_LIBRARY_PARAMETERS
678 ULONG TranslationType
;
679 ULONG MinimumAllocationCount
;
680 ULONG MinimumHeapSize
;
681 ULONG HeapAllocationAttributes
;
682 PWCHAR ApplicationBaseDirectory
;
683 ULONG DescriptorCount
;
684 PWCHAR FontBaseDirectory
;
685 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
687 /* This should eventually go into a more public header */
688 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
690 /* This header tells the library what image we're dealing with */
695 ULONG MemoryTranslationType
;
697 /* Where is the image located */
701 /* Offset to BL_MEMORY_DATA */
702 ULONG MemoryDataOffset
;
704 /* Offset to BL_APPLICATION_ENTRY */
705 ULONG AppEntryOffset
;
707 /* Offset to BL_DEVICE_DESCRPIPTOR */
708 ULONG BootDeviceOffset
;
710 /* Offset to BL_FIRMWARE_PARAMETERS */
711 ULONG FirmwareParametersOffset
;
713 /* Offset to BL_RETURN_ARGUMENTS */
714 ULONG ReturnArgumentsOffset
;
715 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
717 typedef struct _BL_MEMORY_DATA
721 ULONG DescriptorCount
;
722 ULONG DescriptorSize
;
723 ULONG DescriptorOffset
;
724 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
726 typedef struct _BL_FIRMWARE_DESCRIPTOR
730 EFI_HANDLE ImageHandle
;
731 EFI_SYSTEM_TABLE
*SystemTable
;
732 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
734 typedef struct _BL_RETURN_ARGUMENTS
741 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
743 typedef struct _BL_MEMORY_DESCRIPTOR
745 LIST_ENTRY ListEntry
;
751 ULONGLONG VirtualPage
;
755 ULONGLONG BaseAddress
;
756 ULONGLONG VirtualAddress
;
762 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
764 typedef struct _BL_BCD_OPTION
770 ULONG NextEntryOffset
;
772 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
774 typedef struct _BL_APPLICATION_ENTRY
780 BL_BCD_OPTION BcdData
;
781 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
783 typedef struct _BL_LOADED_APPLICATION_ENTRY
787 PBL_BCD_OPTION BcdData
;
788 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
790 typedef struct _BL_MENU_STATUS
797 ULONG AdvancedOptions
: 1;
798 ULONG BootOptions
: 1;
807 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
809 typedef enum _BL_BOOT_ERROR_STATUS
819 } BL_BOOT_ERROR_STATUS
;
821 typedef struct _BL_HARDDISK_DEVICE
828 ULONG PartitionSignature
;
833 GUID PartitionSignature
;
841 } BL_HARDDISK_DEVICE
;
843 typedef struct _BL_LOCAL_DEVICE
853 BL_HARDDISK_DEVICE HardDisk
;
857 PHYSICAL_ADDRESS ImageBase
;
858 LARGE_INTEGER ImageSize
;
862 ULONG File
; // unknown for now
864 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
866 typedef struct _BL_DEVICE_DESCRIPTOR
868 DEVICE_TYPE DeviceType
;
874 BL_LOCAL_DEVICE Local
;
885 ULONG PartitionNumber
;
893 BL_LOCAL_DEVICE Disk
;
896 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
898 typedef struct _BL_FILE_PATH_DESCRIPTOR
903 UCHAR Path
[ANYSIZE_ARRAY
];
904 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
906 typedef struct _BL_WINDOWS_LOAD_OPTIONS
912 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
913 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
915 typedef struct _BL_ARCH_CONTEXT
918 BL_TRANSLATION_TYPE TranslationType
;
920 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
922 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
928 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
930 typedef struct _BL_ADDRESS_RANGE
934 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
936 typedef struct _BL_FILE_INFORMATION
942 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
944 typedef struct _BL_FILE_CALLBACKS
947 PBL_FILE_CLOSE Close
;
949 PBL_FILE_WRITE Write
;
950 PBL_FILE_GET_NEXT GetNext
;
951 PBL_FILE_GET_INFO GetInfo
;
952 PBL_FILE_SET_INFO SetInfo
;
953 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
955 typedef struct _BL_FILE_ENTRY
961 ULONG ReferenceCount
;
963 ULONGLONG TotalBytesRead
;
965 BL_FILE_CALLBACKS Callbacks
;
966 PVOID FsSpecificData
;
967 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
969 typedef struct _BL_FILE_SYSTEM_ENTRY
971 LIST_ENTRY ListEntry
;
972 PBL_FS_INIT_CALLBACK InitCallback
;
973 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
974 PBL_FS_MOUNT_CALLBACK MountCallback
;
975 PBL_FS_PURGE_CALLBACK PurgeCallback
;
976 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
978 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
980 PBL_FS_INIT_CALLBACK Init
;
981 PBL_FS_DESTROY_CALLBACK Destroy
;
982 PBL_FS_MOUNT_CALLBACK Mount
;
983 PBL_FS_PURGE_CALLBACK Purge
;
984 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
986 typedef struct _BL_DISPLAY_STATE
993 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
995 typedef struct _BL_DISPLAY_MODE
1000 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
1002 typedef struct _BL_TEXT_CONSOLE_VTABLE
1004 PCONSOLE_DESTRUCT Destruct
;
1005 PCONSOLE_REINITIALIZE Reinitialize
;
1006 PCONSOLE_GET_TEXT_STATE GetTextState
;
1007 PCONSOLE_SET_TEXT_STATE SetTextState
;
1008 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
1009 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
1010 PCONSOLE_CLEAR_TEXT ClearText
;
1011 PCONSOLE_WRITE_TEXT WriteText
;
1012 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
1014 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
1016 BL_TEXT_CONSOLE_VTABLE Text
;
1017 PCONSOLE_IS_ENABLED IsEnabled
;
1018 PCONSOLE_ENABLE Enable
;
1019 PVOID GetConsoleResolution
;
1020 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
1021 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
1022 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
1023 /// more for graphics ///
1024 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1026 typedef struct _BL_TEXT_CONSOLE
1028 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1029 BL_DISPLAY_STATE State
;
1030 BL_DISPLAY_MODE DisplayMode
;
1032 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1034 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1035 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1037 typedef struct _BL_INPUT_CONSOLE_VTABLE
1039 PCONSOLE_DESTRUCT Destruct
;
1040 PCONSOLE_REINITIALIZE Reinitialize
;
1041 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1042 //PCONSOLE_READ_INPUT ReadInput;
1043 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1044 //PCONSOLE_FILL_BUFFER FillBuffer;
1045 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1047 typedef struct _BL_INPUT_CONSOLE
1049 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1054 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1056 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1060 } BL_GRAPHICS_CONSOLE_TYPE
;
1062 typedef struct _BL_GRAPHICS_CONSOLE
1064 BL_TEXT_CONSOLE TextConsole
;
1065 BL_DISPLAY_MODE DisplayMode
;
1069 BL_DISPLAY_MODE OldDisplayMode
;
1070 ULONG OldPixelDepth
;
1072 BL_GRAPHICS_CONSOLE_TYPE Type
;
1073 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1075 ULONG FrameBufferSize
;
1076 ULONG PixelsPerScanLine
;
1079 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1081 typedef struct _BL_REMOTE_CONSOLE
1083 BL_TEXT_CONSOLE TextConsole
;
1084 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1086 typedef struct _BL_HASH_TABLE
1088 PLIST_ENTRY HashLinks
;
1090 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1091 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1092 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1094 typedef struct _BL_HASH_ENTRY
1099 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1101 typedef struct _BL_HASH_VALUE
1105 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1107 typedef struct _BL_HASH_NODE
1109 LIST_ENTRY ListEntry
;
1110 BL_HASH_ENTRY Entry
;
1111 BL_HASH_VALUE Value
;
1112 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1114 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1116 BL_LOCAL_DEVICE_TYPE Type
;
1119 BL_PARTITION_TYPE PartitionType
;
1122 ULONGLONG LastBlock
;
1139 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1141 typedef struct _BL_DEVICE_INFORMATION
1143 BL_DEVICE_TYPE DeviceType
;
1146 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1148 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1150 typedef struct _BL_BLOCK_DEVICE
1152 BL_BLOCK_DEVICE_INFORMATION
;
1153 ULONGLONG StartOffset
;
1154 EFI_BLOCK_IO
* Protocol
;
1156 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1158 typedef struct _BL_PROTOCOL_HANDLE
1162 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1164 typedef struct _BL_DEVICE_CALLBACKS
1166 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1167 PBL_DEVICE_OPEN Open
;
1168 PBL_DEVICE_CLOSE Close
;
1169 PBL_DEVICE_READ Read
;
1170 PBL_DEVICE_WRITE Write
;
1171 PBL_DEVICE_GET_INFORMATION GetInformation
;
1172 PBL_DEVICE_SET_INFORMATION SetInformation
;
1173 PBL_DEVICE_RESET Reset
;
1174 PBL_DEVICE_FLUSH Flush
;
1175 PBL_DEVICE_CREATE Create
;
1176 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1178 typedef struct _BL_DEVICE_ENTRY
1183 ULONG ReferenceCount
;
1184 BL_DEVICE_CALLBACKS Callbacks
;
1185 PVOID DeviceSpecificData
;
1186 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1187 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1189 typedef struct _BL_IMG_FILE
1199 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1201 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1203 PBL_APPLICATION_ENTRY AppEntry
;
1206 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1208 typedef struct _BL_IMAGE_PARAMETERS
1213 } BL_IMAGE_PARAMETERS
, *PBL_IMAGE_PARAMETERS
;
1215 typedef struct _BL_DEFERRED_FONT_FILE
1217 LIST_ENTRY ListEntry
;
1219 PBL_DEVICE_DESCRIPTOR Device
;
1221 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1225 typedef struct _BMP_HEADER
1231 } BMP_HEADER
, *PBMP_HEADER
;
1233 typedef struct _DIB_HEADER
1242 ULONG XPelsPerMeter
;
1243 ULONG YPelsPerMEter
;
1246 } DIB_HEADER
, *PDIB_HEADER
;
1248 typedef struct _BITMAP
1250 BMP_HEADER BmpHeader
;
1251 DIB_HEADER DibHeader
;
1255 typedef struct _COORD
1261 typedef struct _BL_PD_DATA_BLOB
1266 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1268 /* INLINE ROUTINES ***********************************************************/
1272 BlSetupDefaultParameters (
1273 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1276 BL_LIBRARY_PARAMETERS DefaultParameters
=
1288 /* Copy the defaults */
1289 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1294 MmMdInitializeListHead (
1295 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1298 /* Initialize the list */
1299 InitializeListHead(&List
->ListHead
);
1300 List
->First
= &List
->ListHead
;
1305 /* INITIALIZATION ROUTINES ***************************************************/
1308 BlInitializeLibrary(
1309 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1310 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1321 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1326 _In_ PBL_MEMORY_DATA MemoryData
,
1327 _In_ BL_TRANSLATION_TYPE TranslationType
,
1328 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1338 _In_ PBL_MEMORY_DATA MemoryData
,
1339 _In_ ULONG MinimumPages
1345 _In_ PBL_MEMORY_DATA MemoryData
,
1346 _In_ BL_TRANSLATION_TYPE TranslationType
,
1347 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1352 _In_ ULONG HeapSize
,
1353 _In_ ULONG HeapAttributes
1359 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1363 BlpDeviceInitialize (
1378 BlpDisplayInitialize (
1383 BlpDisplayReinitialize (
1397 /* FIRMWARE ROUTINES *********************************************************/
1407 _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
1411 BlFwEnumerateDevice (
1412 _In_ PBL_DEVICE_DESCRIPTOR Device
1419 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1424 _In_ ULONG StallTime
1438 EfiConOutOutputString (
1439 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1444 EfiConOutQueryMode (
1445 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1447 _In_ UINTN
* Columns
,
1453 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1458 EfiConOutReadCurrentMode (
1459 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1460 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1464 EfiConOutSetAttribute (
1465 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1466 _In_ ULONG Attribute
1470 EfiConOutSetCursorPosition (
1471 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1477 EfiConOutEnableCursor (
1478 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1479 _In_ BOOLEAN Visible
1483 EfiLocateHandleBuffer (
1484 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1485 _In_ EFI_GUID
*Protocol
,
1486 _Inout_ PULONG HandleCount
,
1487 _Inout_ EFI_HANDLE
** Buffer
1492 _In_ EFI_HANDLE Handle
,
1493 _In_ EFI_GUID
*Protocol
,
1494 _Out_ PVOID
* Interface
1499 _In_ EFI_HANDLE Handle
,
1500 _In_ EFI_GUID
*Protocol
1504 EfiGopGetCurrentMode (
1505 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1507 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1512 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1517 EfiGopGetFrameBuffer (
1518 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1519 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1520 _Out_ UINTN
*FrameBufferSize
1525 _In_ EFI_RESET_TYPE ResetType
1530 _In_ EFI_DEVICE_PATH
*DevicePath
1534 EfiIsDevicePathParent (
1535 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1536 _In_ EFI_DEVICE_PATH
*DevicePath2
1541 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1544 /* PLATFORM TIMER ROUTINES ***************************************************/
1547 BlpTimeCalibratePerformanceCounter (
1552 BlTimeQueryPerformanceCounter (
1553 _Out_opt_ PLARGE_INTEGER Frequency
1556 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1559 BlpDisplayRegisterLocale (
1563 /* FONT ROUTINES *************************************************************/
1566 BfiFreeDeferredFontFile (
1567 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1572 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1573 _In_ PWCHAR FontPath
1577 BfLoadDeferredFontFiles (
1583 _In_ PBL_GRAPHICS_CONSOLE Console
1587 BfClearToEndOfLine (
1588 _In_ PBL_GRAPHICS_CONSOLE Console
1591 /* FILESYSTEM ROUTINES *******************************************************/
1600 _In_ ULONG DeviceId
,
1602 _Out_ PBL_FILE_ENTRY
* FileEntry
1612 _In_ ULONG DeviceId
,
1614 _Out_ PBL_FILE_ENTRY
* FileEntry
1617 /* DEBUG ROUTINES ************************************************************/
1621 BlBdDebuggerEnabled (
1626 BlBdPullRemoteFile (
1627 _In_ PWCHAR FilePath
,
1628 _Out_ PVOID BaseAddress
,
1629 _Out_ PULONGLONG FileSize
1640 _In_ ULONG ErrorCode
,
1641 _In_ ULONG Parameter1
,
1642 _In_ ULONG_PTR Parameter2
,
1643 _In_ ULONG_PTR Parameter3
,
1644 _In_ ULONG_PTR Parameter4
1647 /* UTILITY ROUTINES **********************************************************/
1650 BlUtlUpdateProgress (
1651 _In_ ULONG Percentage
,
1652 _Out_opt_ PBOOLEAN Completed
1657 _Out_ PVOID
* TableAddress
,
1658 _In_ ULONG Signature
1667 BlUtlRegisterProgressRoutine (
1673 _In_ ULONG PartialSum
,
1680 BlGetApplicationBaseAndSize (
1681 _Out_ PVOID
* ImageBase
,
1682 _Out_ PULONG ImageSize
1686 BlDestroyBootEntry (
1687 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1692 _In_
const GUID
* DataGuid
,
1694 _Inout_ PBL_PD_DATA_BLOB DataBlob
1697 /* FIRMWARE UTILITY ROUTINES *************************************************/
1700 EfiGetEfiStatusCode(
1701 _In_ NTSTATUS Status
1705 EfiGetNtStatusCode (
1706 _In_ EFI_STATUS EfiStatus
1715 BlGetApplicationIdentifier (
1720 BlpSecureBootEFIIsEnabled (
1725 BlSecureBootIsEnabled (
1726 _Out_ PBOOLEAN SecureBootEnabled
1730 BlSecureBootCheckForFactoryReset (
1734 /* RESOURCE ROUTINES *********************************************************/
1737 BlResourceFindMessage (
1742 BlResourceFindHtml (
1747 BlpResourceInitialize (
1751 /* TABLE ROUTINES ************************************************************/
1757 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1764 _Out_ PULONG EntryIndex
,
1765 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1766 _In_ PVOID Argument1
,
1767 _In_ PVOID Argument2
,
1768 _In_ PVOID Argument3
,
1769 _In_ PVOID Argument4
1774 _Inout_ PVOID
** Table
,
1775 _Inout_ PULONG Count
,
1777 _Out_ PULONG EntryIndex
,
1778 _In_ PBL_TBL_SET_ROUTINE Callback
1782 TblDoNotPurgeEntry (
1786 /* HASH TABLE ROUTINES *******************************************************/
1791 _In_ PBL_HASH_ENTRY Entry
,
1799 _In_ PBL_HASH_ENTRY Entry
,
1800 _Out_ PBL_HASH_VALUE
*Value
1806 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1807 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1811 /* BCD OPTION ROUTINES *******************************************************/
1815 _In_ PBL_BCD_OPTION List
,
1820 BlGetBootOptionListSize (
1821 _In_ PBL_BCD_OPTION BcdOption
1825 BlGetBootOptionSize (
1826 _In_ PBL_BCD_OPTION BcdOption
1830 BlGetBootOptionString (
1831 _In_ PBL_BCD_OPTION List
,
1837 BlGetBootOptionInteger (
1838 _In_ PBL_BCD_OPTION List
,
1840 _Out_ PULONGLONG Value
1844 BlGetBootOptionBoolean (
1845 _In_ PBL_BCD_OPTION List
,
1847 _Out_ PBOOLEAN Value
1851 BlpGetBootOptionIntegerList (
1852 _In_ PBL_BCD_OPTION List
,
1854 _Out_ PULONGLONG
* Value
,
1855 _Out_ PULONGLONG Count
,
1860 BlGetBootOptionDevice (
1861 _In_ PBL_BCD_OPTION List
,
1863 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1864 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1868 BlGetBootOptionGuid (
1869 _In_ PBL_BCD_OPTION List
,
1875 BlGetBootOptionGuidList (
1876 _In_ PBL_BCD_OPTION List
,
1884 _In_ PBL_BCD_OPTION OptionList
,
1885 _Out_ PBL_BCD_OPTION
*CopiedOptions
1889 BlAppendBootOptionBoolean (
1890 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1895 BlAppendBootOptionInteger (
1896 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1897 _In_ ULONG OptionId
,
1898 _In_ ULONGLONG Value
1902 BlAppendBootOptionString (
1903 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1904 _In_ PWCHAR OptionString
1908 BlAppendBootOptions (
1909 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1910 _In_ PBL_BCD_OPTION Options
1914 BlRemoveBootOption (
1915 _In_ PBL_BCD_OPTION List
,
1920 BlReplaceBootOptions (
1921 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1922 _In_ PBL_BCD_OPTION NewOptions
1925 /* BOOT REGISTRY ROUTINES ****************************************************/
1929 _In_ HANDLE KeyHandle
1934 _In_ HANDLE ParentHandle
,
1935 _In_ PWCHAR KeyName
,
1936 _Out_ PHANDLE Handle
1941 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1942 _Out_ PHANDLE HiveHandle
1946 BiGetRegistryValue (
1947 _In_ HANDLE KeyHandle
,
1948 _In_ PWCHAR ValueName
,
1950 _Out_ PVOID
* Buffer
,
1951 _Out_ PULONG ValueLength
1955 BiEnumerateSubKeys (
1956 _In_ HANDLE KeyHandle
,
1957 _Out_ PWCHAR
** SubKeyList
,
1958 _Out_ PULONG SubKeyCount
1963 _In_ HANDLE KeyHandle
1968 _In_ HANDLE KeyHandle
1971 /* CONTEXT ROUTINES **********************************************************/
1974 BlpArchSwitchContext (
1975 _In_ BL_ARCH_MODE NewMode
1979 Archx86TransferTo32BitApplicationAsm (
1983 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1986 MmMdInitializeList (
1987 _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList
,
1989 _In_ PLIST_ENTRY ListHead
1994 _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList
,
1995 _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList
,
1996 _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor
,
1997 _Out_ PULONG ActualCount
,
2004 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2009 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2012 PBL_MEMORY_DESCRIPTOR
2013 MmMdInitByteGranularDescriptor (
2015 _In_ BL_MEMORY_TYPE Type
,
2016 _In_ ULONGLONG BasePage
,
2017 _In_ ULONGLONG VirtualPage
,
2018 _In_ ULONGLONG PageCount
2022 MmMdFreeGlobalDescriptors (
2027 MmMdAddDescriptorToList (
2028 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2029 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
2034 MmMdRemoveDescriptorFromList (
2035 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2036 _In_ PBL_MEMORY_DESCRIPTOR Entry
2040 MmMdFindSatisfyingRegion (
2041 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
2042 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
2043 _In_ ULONGLONG Pages
,
2044 _In_ PBL_ADDRESS_RANGE BaseRange
,
2045 _In_ PBL_ADDRESS_RANGE VirtualRange
,
2046 _In_ BOOLEAN TopDown
,
2047 _In_ BL_MEMORY_TYPE MemoryType
,
2049 _In_ ULONG Alignment
2053 MmMdRemoveRegionFromMdlEx (
2054 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2056 __in ULONGLONG BasePage
,
2057 __in ULONGLONG PageCount
,
2058 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2062 MmMdFreeDescriptor (
2063 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2066 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2069 BlMmAllocatePhysicalPages(
2070 _Inout_ PPHYSICAL_ADDRESS Address
,
2071 _In_ BL_MEMORY_TYPE MemoryType
,
2072 _In_ ULONGLONG PageCount
,
2073 _In_ ULONG Attributes
,
2074 _In_ ULONG Alignment
2078 MmPapAllocatePhysicalPagesInRange (
2079 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2080 _In_ BL_MEMORY_TYPE MemoryType
,
2081 _In_ ULONGLONG Pages
,
2082 _In_ ULONG Attributes
,
2083 _In_ ULONG Alignment
,
2084 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2085 _In_opt_ PBL_ADDRESS_RANGE Range
,
2086 _In_ ULONG RangeType
2090 BlMmFreePhysicalPages (
2091 _In_ PHYSICAL_ADDRESS Address
2097 _In_ ULONG WhichList
2101 MmPapAllocatePagesInRange (
2102 _Inout_ PVOID
* PhysicalAddress
,
2103 _In_ BL_MEMORY_TYPE MemoryType
,
2104 _In_ ULONGLONG Pages
,
2105 _In_ ULONG Attributes
,
2106 _In_ ULONG Alignment
,
2107 _In_opt_ PBL_ADDRESS_RANGE Range
,
2113 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2118 BlpMmInitializeConstraints (
2123 BlMmRemoveBadMemory (
2129 _In_ PLIST_ENTRY MemoryMap
,
2130 _In_ PBL_IMAGE_PARAMETERS MemoryParameters
,
2131 _In_ ULONG WhichTypes
,
2135 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2138 BlMmMapPhysicalAddressEx (
2139 _In_ PVOID
* VirtualAddress
,
2140 _In_ ULONG Attributes
,
2141 _In_ ULONGLONG Size
,
2142 _In_ PHYSICAL_ADDRESS PhysicalAddress
2146 BlMmUnmapVirtualAddressEx (
2147 _In_ PVOID VirtualAddress
,
2152 BlMmTranslateVirtualAddress (
2153 _In_ PVOID VirtualAddress
,
2154 _Out_ PPHYSICAL_ADDRESS PhysicalAddress
2157 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2160 BlpMmCreateBlockAllocator (
2164 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2176 /* DISPLAY ROUTINES **********************************************************/
2179 BlDisplayGetTextCellResolution (
2180 _Out_ PULONG TextWidth
,
2181 _Out_ PULONG TextHeight
2185 BlDisplaySetScreenResolution (
2190 BlDisplayGetScreenResolution (
2196 BlDisplayInvalidateOemBitmap (
2201 BlDisplayGetOemBitmap (
2202 _Out_ PCOORD Offset
,
2203 _Out_opt_ PULONG Flags
2207 BlDisplayValidOemBitmap (
2212 BlDisplayClearScreen (
2217 BlDisplaySetCursorType (
2221 /* I/O ROUTINES **************************************************************/
2224 BlpIoRegisterDestroyRoutine (
2225 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2235 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2238 _Out_ PULONG DeviceId
2242 BlDeviceGetInformation (
2243 _In_ ULONG DeviceId
,
2244 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2248 BlDeviceSetInformation (
2249 _In_ ULONG DeviceId
,
2250 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2254 BlDeviceReadAtOffset (
2255 _In_ ULONG DeviceId
,
2257 _In_ ULONGLONG Offset
,
2259 _Out_ PULONG BytesRead
2262 /* IMAGE ROUTINES ************************************************************/
2265 BlImgLoadImageWithProgress2 (
2266 _In_ ULONG DeviceId
,
2267 _In_ BL_MEMORY_TYPE MemoryType
,
2268 _In_ PWCHAR FileName
,
2269 _Inout_ PVOID
* MappedBase
,
2270 _Inout_ PULONG MappedSize
,
2271 _In_ ULONG ImageFlags
,
2272 _In_ BOOLEAN ShowProgress
,
2273 _Out_opt_ PUCHAR
* HashBuffer
,
2274 _Out_opt_ PULONG HashSize
2277 PIMAGE_SECTION_HEADER
2279 _In_ PVOID ImageBase
,
2280 _In_ ULONG ImageSize
2284 BlImgLoadBootApplication (
2285 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2286 _Out_ PULONG AppHandle
2290 BlImgStartBootApplication (
2291 _In_ ULONG AppHandle
,
2292 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2296 BlImgUnloadBootApplication (
2297 _In_ ULONG AppHandle
2301 BlImgQueryCodeIntegrityBootOptions (
2302 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2303 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2304 _Out_ PBOOLEAN TestSigning
2307 /* FILE I/O ROUTINES *********************************************************/
2315 BlFileReadAtOffsetEx (
2318 _In_ ULONGLONG ByteOffset
,
2320 _Out_ PULONG BytesReturned
,
2325 BlFileGetInformation (
2327 _In_ PBL_FILE_INFORMATION FileInfo
2332 _In_ ULONG DeviceId
,
2333 _In_ PWCHAR FileName
,
2338 /* BLOCK I/O ROUTINES *******************************************************/
2341 BlockIoEfiCompareDevice (
2342 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2343 _In_ EFI_HANDLE Handle
2346 /* INPUT CONSOLE ROUTINES ****************************************************/
2349 ConsoleInputLocalDestruct (
2350 _In_
struct _BL_INPUT_CONSOLE
* Console
2354 ConsoleInputBaseReinitialize (
2355 _In_
struct _BL_INPUT_CONSOLE
* Console
2359 ConsoleCreateLocalInputCnsole (
2363 /* TEXT CONSOLE ROUTINES *****************************************************/
2366 ConsoleGraphicalDestruct (
2367 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2371 ConsoleGraphicalClearText (
2372 _In_ PBL_GRAPHICS_CONSOLE Console
,
2373 _In_ BOOLEAN LineOnly
2377 ConsoleGraphicalClearPixels (
2378 _In_ PBL_GRAPHICS_CONSOLE Console
,
2383 ConsoleGraphicalReinitialize (
2384 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2388 ConsoleGraphicalSetTextState (
2389 _In_ PBL_GRAPHICS_CONSOLE Console
,
2391 _In_ PBL_DISPLAY_STATE TextState
2395 ConsoleGraphicalIsEnabled (
2396 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2400 ConsoleGraphicalGetGraphicalResolution (
2401 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2402 _In_ PBL_DISPLAY_MODE DisplayMode
2406 ConsoleGraphicalGetOriginalResolution (
2407 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2408 _In_ PBL_DISPLAY_MODE DisplayMode
2412 ConsoleGraphicalEnable (
2413 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2418 ConsoleTextLocalDestruct (
2419 _In_
struct _BL_TEXT_CONSOLE
* Console
2423 ConsoleTextLocalReinitialize (
2424 _In_
struct _BL_TEXT_CONSOLE
* Console
2428 ConsoleTextBaseGetTextState (
2429 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2430 _Out_ PBL_DISPLAY_STATE TextState
2434 ConsoleTextLocalSetTextState (
2435 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2437 _In_ PBL_DISPLAY_STATE TextState
2441 ConsoleTextBaseGetTextResolution (
2442 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2443 _Out_ PULONG TextResolution
2447 ConsoleTextLocalSetTextResolution (
2448 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2449 _In_ ULONG NewTextResolution
,
2450 _Out_ PULONG OldTextResolution
2454 ConsoleTextLocalClearText (
2455 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2456 _In_ BOOLEAN LineOnly
2460 ConsoleTextLocalWriteText (
2461 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2463 _In_ ULONG Attribute
2467 ConsoleTextLocalConstruct (
2468 _In_ PBL_TEXT_CONSOLE TextConsole
,
2469 _In_ BOOLEAN Activate
2473 ConsolepFindResolution (
2474 _In_ PBL_DISPLAY_MODE Mode
,
2475 _In_ PBL_DISPLAY_MODE List
,
2480 ConsoleFirmwareTextClear (
2481 _In_ PBL_TEXT_CONSOLE Console
,
2482 _In_ BOOLEAN LineOnly
2486 ConsoleFirmwareTextClose (
2487 _In_ PBL_TEXT_CONSOLE TextConsole
2491 ConsoleFirmwareTextOpen (
2492 _In_ PBL_TEXT_CONSOLE TextConsole
2496 ConsoleFirmwareTextSetState (
2497 _In_ PBL_TEXT_CONSOLE TextConsole
,
2499 _In_ PBL_DISPLAY_STATE State
2503 ConsoleGraphicalConstruct (
2504 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2508 ConsoleCreateRemoteConsole (
2509 _In_ PBL_TEXT_CONSOLE
* TextConsole
2513 ConsoleEfiGraphicalOpenProtocol (
2514 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2515 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2519 ConsoleFirmwareGraphicalClose (
2520 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2524 ConsoleFirmwareGraphicalDisable (
2525 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2529 ConsoleFirmwareGraphicalClear (
2530 _In_ PBL_GRAPHICS_CONSOLE Console
,
2535 ConsoleFirmwareGraphicalEnable (
2536 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2541 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2545 ConsoleEfiUgaClose (
2546 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2550 ConsoleEfiGopClose (
2551 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2556 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2560 ConsoleEfiGopEnable (
2561 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2565 ConsoleEfiUgaSetResolution (
2566 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2567 _In_ PBL_DISPLAY_MODE DisplayMode
,
2568 _In_ ULONG DisplayModeCount
2572 ConsoleCreateLocalInputConsole (
2577 ConsoleInputLocalEraseBuffer (
2578 _In_ PBL_INPUT_CONSOLE Console
,
2579 _In_opt_ PULONG ValueToFill
2583 ConsolepClearBuffer (
2584 _In_ PUCHAR FrameBuffer
,
2586 _In_ PUCHAR FillColor
,
2588 _In_ ULONG ScanlineWidth
,
2589 _In_ ULONG PixelDepth
2593 ConsolepConvertColorToPixel (
2594 _In_ BL_COLOR Color
,
2598 extern ULONG MmDescriptorCallTreeCount
;
2599 extern ULONG BlpApplicationFlags
;
2600 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2601 extern BL_TRANSLATION_TYPE MmTranslationType
;
2602 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2603 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2604 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2605 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2606 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2607 extern EFI_GUID EfiGraphicsOutputProtocol
;
2608 extern EFI_GUID EfiUgaDrawProtocol
;
2609 extern EFI_GUID EfiLoadedImageProtocol
;
2610 extern EFI_GUID EfiDevicePathProtocol
;
2611 extern EFI_GUID EfiBlockIoProtocol
;
2612 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2613 extern EFI_GUID EfiRootAcpiTableGuid
;
2614 extern EFI_GUID EfiRootAcpiTable10Guid
;
2615 extern EFI_GUID EfiGlobalVariable
;
2616 extern ULONG ConsoleGraphicalResolutionListFlags
;
2617 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2618 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2619 extern ULONG ConsoleGraphicalResolutionListSize
;
2620 extern PVOID DspRemoteInputConsole
;
2621 extern PVOID DspLocalInputConsole
;
2622 extern WCHAR BlScratchBuffer
[8192];
2623 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated
;
2624 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated
;
2625 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker
;
2626 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2627 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated
;
2628 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated
;
2629 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory
;
2630 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory
;
2631 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory
;
2632 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory
;
2633 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual
;
2634 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers
;
2635 extern ULONGLONG BlpTimePerformanceFrequency
;
2636 extern LIST_ENTRY RegisteredFileSystems
;