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
) (
674 /* DATA STRUCTURES ***********************************************************/
676 typedef struct _BL_LIBRARY_PARAMETERS
679 ULONG TranslationType
;
680 ULONG MinimumAllocationCount
;
681 ULONG MinimumHeapSize
;
682 ULONG HeapAllocationAttributes
;
683 PWCHAR ApplicationBaseDirectory
;
684 ULONG DescriptorCount
;
685 PWCHAR FontBaseDirectory
;
686 } BL_LIBRARY_PARAMETERS
, *PBL_LIBRARY_PARAMETERS
;
688 /* This should eventually go into a more public header */
689 typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
691 /* This header tells the library what image we're dealing with */
696 ULONG MemoryTranslationType
;
698 /* Where is the image located */
702 /* Offset to BL_MEMORY_DATA */
703 ULONG MemoryDataOffset
;
705 /* Offset to BL_APPLICATION_ENTRY */
706 ULONG AppEntryOffset
;
708 /* Offset to BL_DEVICE_DESCRPIPTOR */
709 ULONG BootDeviceOffset
;
711 /* Offset to BL_FIRMWARE_PARAMETERS */
712 ULONG FirmwareParametersOffset
;
714 /* Offset to BL_RETURN_ARGUMENTS */
715 ULONG ReturnArgumentsOffset
;
716 } BOOT_APPLICATION_PARAMETER_BLOCK
, *PBOOT_APPLICATION_PARAMETER_BLOCK
;
718 typedef struct _BL_MEMORY_DATA
722 ULONG DescriptorCount
;
723 ULONG DescriptorSize
;
724 ULONG DescriptorOffset
;
725 } BL_MEMORY_DATA
, *PBL_MEMORY_DATA
;
727 typedef struct _BL_FIRMWARE_DESCRIPTOR
731 EFI_HANDLE ImageHandle
;
732 EFI_SYSTEM_TABLE
*SystemTable
;
733 } BL_FIRMWARE_DESCRIPTOR
, *PBL_FIRMWARE_DESCRIPTOR
;
735 typedef struct _BL_RETURN_ARGUMENTS
742 } BL_RETURN_ARGUMENTS
, *PBL_RETURN_ARGUMENTS
;
744 typedef struct _BL_MEMORY_DESCRIPTOR
746 LIST_ENTRY ListEntry
;
752 ULONGLONG VirtualPage
;
756 ULONGLONG BaseAddress
;
757 ULONGLONG VirtualAddress
;
763 } BL_MEMORY_DESCRIPTOR
, *PBL_MEMORY_DESCRIPTOR
;
765 typedef struct _BL_BCD_OPTION
771 ULONG NextEntryOffset
;
773 } BL_BCD_OPTION
, *PBL_BCD_OPTION
;
775 typedef struct _BL_APPLICATION_ENTRY
781 BL_BCD_OPTION BcdData
;
782 } BL_APPLICATION_ENTRY
, *PBL_APPLICATION_ENTRY
;
784 typedef struct _BL_LOADED_APPLICATION_ENTRY
788 PBL_BCD_OPTION BcdData
;
789 } BL_LOADED_APPLICATION_ENTRY
, *PBL_LOADED_APPLICATION_ENTRY
;
791 typedef struct _BL_MENU_STATUS
798 ULONG AdvancedOptions
: 1;
799 ULONG BootOptions
: 1;
808 } BL_MENU_STATUS
, *PL_MENU_STATUS
;
810 typedef enum _BL_BOOT_ERROR_STATUS
820 } BL_BOOT_ERROR_STATUS
;
822 typedef struct _BL_HARDDISK_DEVICE
829 ULONG PartitionSignature
;
834 GUID PartitionSignature
;
842 } BL_HARDDISK_DEVICE
;
844 typedef struct _BL_LOCAL_DEVICE
854 BL_HARDDISK_DEVICE HardDisk
;
858 PHYSICAL_ADDRESS ImageBase
;
859 LARGE_INTEGER ImageSize
;
863 ULONG File
; // unknown for now
865 } BL_LOCAL_DEVICE
, *PBL_LOCAL_DEVICE
;
867 typedef struct _BL_DEVICE_DESCRIPTOR
869 DEVICE_TYPE DeviceType
;
875 BL_LOCAL_DEVICE Local
;
886 ULONG PartitionNumber
;
894 BL_LOCAL_DEVICE Disk
;
897 } BL_DEVICE_DESCRIPTOR
, *PBL_DEVICE_DESCRIPTOR
;
899 typedef struct _BL_FILE_PATH_DESCRIPTOR
904 UCHAR Path
[ANYSIZE_ARRAY
];
905 } BL_FILE_PATH_DESCRIPTOR
, *PBL_FILE_PATH_DESCRIPTOR
;
907 typedef struct _BL_WINDOWS_LOAD_OPTIONS
913 WCHAR LoadOptions
[ANYSIZE_ARRAY
];
914 } BL_WINDOWS_LOAD_OPTIONS
, *PBL_WINDOWS_LOAD_OPTIONS
;
916 typedef struct _BL_ARCH_CONTEXT
919 BL_TRANSLATION_TYPE TranslationType
;
921 } BL_ARCH_CONTEXT
, *PBL_ARCH_CONTEXT
;
923 typedef struct _BL_MEMORY_DESCRIPTOR_LIST
929 } BL_MEMORY_DESCRIPTOR_LIST
, *PBL_MEMORY_DESCRIPTOR_LIST
;
931 typedef struct _BL_ADDRESS_RANGE
935 } BL_ADDRESS_RANGE
, *PBL_ADDRESS_RANGE
;
937 typedef struct _BL_FILE_INFORMATION
943 } BL_FILE_INFORMATION
, *PBL_FILE_INFORMATION
;
945 typedef struct _BL_FILE_CALLBACKS
948 PBL_FILE_CLOSE Close
;
950 PBL_FILE_WRITE Write
;
951 PBL_FILE_GET_NEXT GetNext
;
952 PBL_FILE_GET_INFO GetInfo
;
953 PBL_FILE_SET_INFO SetInfo
;
954 } BL_FILE_CALLBACKS
, *PBL_FILE_CALLBACKS
;
956 typedef struct _BL_FILE_ENTRY
962 ULONG ReferenceCount
;
964 ULONGLONG TotalBytesRead
;
966 BL_FILE_CALLBACKS Callbacks
;
967 PVOID FsSpecificData
;
968 } BL_FILE_ENTRY
, *PBL_FILE_ENTRY
;
970 typedef struct _BL_FILE_SYSTEM_ENTRY
972 LIST_ENTRY ListEntry
;
973 PBL_FS_INIT_CALLBACK InitCallback
;
974 PBL_FS_DESTROY_CALLBACK DestroyCallback
;
975 PBL_FS_MOUNT_CALLBACK MountCallback
;
976 PBL_FS_PURGE_CALLBACK PurgeCallback
;
977 } BL_FILE_SYSTEM_ENTRY
, *PBL_FILE_SYSTEM_ENTRY
;
979 typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
981 PBL_FS_INIT_CALLBACK Init
;
982 PBL_FS_DESTROY_CALLBACK Destroy
;
983 PBL_FS_MOUNT_CALLBACK Mount
;
984 PBL_FS_PURGE_CALLBACK Purge
;
985 } BL_FILE_SYSTEM_REGISTRATION_TABLE
;
987 typedef struct _BL_DISPLAY_STATE
994 } BL_DISPLAY_STATE
, *PBL_DISPLAY_STATE
;
996 typedef struct _BL_DISPLAY_MODE
1001 } BL_DISPLAY_MODE
, *PBL_DISPLAY_MODE
;
1003 typedef struct _BL_TEXT_CONSOLE_VTABLE
1005 PCONSOLE_DESTRUCT Destruct
;
1006 PCONSOLE_REINITIALIZE Reinitialize
;
1007 PCONSOLE_GET_TEXT_STATE GetTextState
;
1008 PCONSOLE_SET_TEXT_STATE SetTextState
;
1009 PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution
;
1010 PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution
;
1011 PCONSOLE_CLEAR_TEXT ClearText
;
1012 PCONSOLE_WRITE_TEXT WriteText
;
1013 } BL_TEXT_CONSOLE_VTABLE
, *PBL_TEXT_CONSOLE_VTABLE
;
1015 typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
1017 BL_TEXT_CONSOLE_VTABLE Text
;
1018 PCONSOLE_IS_ENABLED IsEnabled
;
1019 PCONSOLE_ENABLE Enable
;
1020 PVOID GetConsoleResolution
;
1021 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution
;
1022 PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution
;
1023 PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution
;
1024 /// more for graphics ///
1025 } BL_GRAPHICS_CONSOLE_VTABLE
, *PBL_GRAPHICS_CONSOLE_VTABLE
;
1027 typedef struct _BL_TEXT_CONSOLE
1029 PBL_TEXT_CONSOLE_VTABLE Callbacks
;
1030 BL_DISPLAY_STATE State
;
1031 BL_DISPLAY_MODE DisplayMode
;
1033 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
* Protocol
;
1035 EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode
;
1036 } BL_TEXT_CONSOLE
, *PBL_TEXT_CONSOLE
;
1038 typedef struct _BL_INPUT_CONSOLE_VTABLE
1040 PCONSOLE_DESTRUCT Destruct
;
1041 PCONSOLE_REINITIALIZE Reinitialize
;
1042 //PCONSOLE_IS_KEY_PENDING IsKeyPending;
1043 //PCONSOLE_READ_INPUT ReadInput;
1044 //PCONSOLE_ERASE_BUFFER EraseBuffer;
1045 //PCONSOLE_FILL_BUFFER FillBuffer;
1046 } BL_INPUT_CONSOLE_VTABLE
, *PBL_INPUT_CONSOLE_VTABLE
;
1048 typedef struct _BL_INPUT_CONSOLE
1050 PBL_INPUT_CONSOLE_VTABLE Callbacks
;
1055 } BL_INPUT_CONSOLE
, *PBL_INPUT_CONSOLE
;
1057 typedef enum _BL_GRAPHICS_CONSOLE_TYPE
1061 } BL_GRAPHICS_CONSOLE_TYPE
;
1063 typedef struct _BL_GRAPHICS_CONSOLE
1065 BL_TEXT_CONSOLE TextConsole
;
1066 BL_DISPLAY_MODE DisplayMode
;
1070 BL_DISPLAY_MODE OldDisplayMode
;
1071 ULONG OldPixelDepth
;
1073 BL_GRAPHICS_CONSOLE_TYPE Type
;
1074 EFI_GRAPHICS_OUTPUT_PROTOCOL
* Protocol
;
1076 ULONG FrameBufferSize
;
1077 ULONG PixelsPerScanLine
;
1080 } BL_GRAPHICS_CONSOLE
, *PBL_GRAPHICS_CONSOLE
;
1082 typedef struct _BL_REMOTE_CONSOLE
1084 BL_TEXT_CONSOLE TextConsole
;
1085 } BL_REMOTE_CONSOLE
, *PBL_REMOTE_CONSOLE
;
1087 typedef struct _BL_HASH_TABLE
1089 PLIST_ENTRY HashLinks
;
1091 PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
;
1092 PBL_HASH_TABLE_HASH_FUNCTION HashFunction
;
1093 } BL_HASH_TABLE
, *PBL_HASH_TABLE
;
1095 typedef struct _BL_HASH_ENTRY
1100 } BL_HASH_ENTRY
, *PBL_HASH_ENTRY
;
1102 typedef struct _BL_HASH_VALUE
1106 } BL_HASH_VALUE
, *PBL_HASH_VALUE
;
1108 typedef struct _BL_HASH_NODE
1110 LIST_ENTRY ListEntry
;
1111 BL_HASH_ENTRY Entry
;
1112 BL_HASH_VALUE Value
;
1113 } BL_HASH_NODE
, *PBL_HASH_NODE
;
1115 typedef struct _BL_BLOCK_DEVICE_INFORMATION
1117 BL_LOCAL_DEVICE_TYPE Type
;
1120 BL_PARTITION_TYPE PartitionType
;
1123 ULONGLONG LastBlock
;
1140 } BL_BLOCK_DEVICE_INFORMATION
, *PBL_BLOCK_DEVICE_INFORMATION
;
1142 typedef struct _BL_DEVICE_INFORMATION
1144 BL_DEVICE_TYPE DeviceType
;
1147 BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo
;
1149 } BL_DEVICE_INFORMATION
, *PBL_DEVICE_INFORMATION
;
1151 typedef struct _BL_BLOCK_DEVICE
1153 BL_BLOCK_DEVICE_INFORMATION
;
1154 ULONGLONG StartOffset
;
1155 EFI_BLOCK_IO
* Protocol
;
1157 } BL_BLOCK_DEVICE
, *PBL_BLOCK_DEVICE
;
1159 typedef struct _BL_PROTOCOL_HANDLE
1163 } BL_PROTOCOL_HANDLE
, *PBL_PROTOCOL_HANDLE
;
1165 typedef struct _BL_DEVICE_CALLBACKS
1167 PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass
;
1168 PBL_DEVICE_OPEN Open
;
1169 PBL_DEVICE_CLOSE Close
;
1170 PBL_DEVICE_READ Read
;
1171 PBL_DEVICE_WRITE Write
;
1172 PBL_DEVICE_GET_INFORMATION GetInformation
;
1173 PBL_DEVICE_SET_INFORMATION SetInformation
;
1174 PBL_DEVICE_RESET Reset
;
1175 PBL_DEVICE_FLUSH Flush
;
1176 PBL_DEVICE_CREATE Create
;
1177 } BL_DEVICE_CALLBACKS
, *PBL_DEVICE_CALLBACKS
;
1179 typedef struct _BL_DEVICE_ENTRY
1184 ULONG ReferenceCount
;
1185 BL_DEVICE_CALLBACKS Callbacks
;
1186 PVOID DeviceSpecificData
;
1187 PBL_DEVICE_DESCRIPTOR DeviceDescriptor
;
1188 } BL_DEVICE_ENTRY
, *PBL_DEVICE_ENTRY
;
1190 typedef struct _BL_IMG_FILE
1200 } BL_IMG_FILE
, *PBL_IMG_FILE
;
1202 typedef struct _BL_IMAGE_APPLICATION_ENTRY
1204 PBL_APPLICATION_ENTRY AppEntry
;
1207 } BL_IMAGE_APPLICATION_ENTRY
, *PBL_IMAGE_APPLICATION_ENTRY
;
1209 typedef struct _BL_IMAGE_PARAMETERS
1214 } BL_IMAGE_PARAMETERS
, *PBL_IMAGE_PARAMETERS
;
1216 typedef struct _BL_DEFERRED_FONT_FILE
1218 LIST_ENTRY ListEntry
;
1220 PBL_DEVICE_DESCRIPTOR Device
;
1222 } BL_DEFERRED_FONT_FILE
, *PBL_DEFERRED_FONT_FILE
;
1226 typedef struct _BMP_HEADER
1232 } BMP_HEADER
, *PBMP_HEADER
;
1234 typedef struct _DIB_HEADER
1243 ULONG XPelsPerMeter
;
1244 ULONG YPelsPerMEter
;
1247 } DIB_HEADER
, *PDIB_HEADER
;
1249 typedef struct _BITMAP
1251 BMP_HEADER BmpHeader
;
1252 DIB_HEADER DibHeader
;
1256 typedef struct _COORD
1262 typedef struct _BL_PD_DATA_BLOB
1267 } BL_PD_DATA_BLOB
, *PBL_PD_DATA_BLOB
;
1269 /* INLINE ROUTINES ***********************************************************/
1273 BlSetupDefaultParameters (
1274 _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
1277 BL_LIBRARY_PARAMETERS DefaultParameters
=
1289 /* Copy the defaults */
1290 RtlCopyMemory(LibraryParameters
, &DefaultParameters
, sizeof(*LibraryParameters
));
1295 MmMdInitializeListHead (
1296 _In_ PBL_MEMORY_DESCRIPTOR_LIST List
1299 /* Initialize the list */
1300 InitializeListHead(&List
->ListHead
);
1301 List
->First
= &List
->ListHead
;
1306 /* INITIALIZATION ROUTINES ***************************************************/
1309 BlInitializeLibrary(
1310 _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters
,
1311 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1322 _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
1327 _In_ PBL_MEMORY_DATA MemoryData
,
1328 _In_ BL_TRANSLATION_TYPE TranslationType
,
1329 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1339 _In_ PBL_MEMORY_DATA MemoryData
,
1340 _In_ ULONG MinimumPages
1346 _In_ PBL_MEMORY_DATA MemoryData
,
1347 _In_ BL_TRANSLATION_TYPE TranslationType
,
1348 _In_ BL_TRANSLATION_TYPE LibraryTranslationType
1353 _In_ ULONG HeapSize
,
1354 _In_ ULONG HeapAttributes
1360 _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
1364 BlpDeviceInitialize (
1379 BlpDisplayInitialize (
1384 BlpDisplayReinitialize (
1398 /* FIRMWARE ROUTINES *********************************************************/
1408 _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
1412 BlFwEnumerateDevice (
1413 _In_ PBL_DEVICE_DESCRIPTOR Device
1420 _Inout_ EFI_PHYSICAL_ADDRESS
* Memory
1425 _In_ ULONG StallTime
1439 EfiConOutOutputString (
1440 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1445 EfiConOutQueryMode (
1446 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1448 _In_ UINTN
* Columns
,
1454 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1459 EfiConOutReadCurrentMode (
1460 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1461 _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE
* Mode
1465 EfiConOutSetAttribute (
1466 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1467 _In_ ULONG Attribute
1471 EfiConOutSetCursorPosition (
1472 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1478 EfiConOutEnableCursor (
1479 _In_ SIMPLE_TEXT_OUTPUT_INTERFACE
*TextInterface
,
1480 _In_ BOOLEAN Visible
1484 EfiLocateHandleBuffer (
1485 _In_ EFI_LOCATE_SEARCH_TYPE SearchType
,
1486 _In_ EFI_GUID
*Protocol
,
1487 _Inout_ PULONG HandleCount
,
1488 _Inout_ EFI_HANDLE
** Buffer
1493 _In_ EFI_HANDLE Handle
,
1494 _In_ EFI_GUID
*Protocol
,
1495 _Out_ PVOID
* Interface
1500 _In_ EFI_HANDLE Handle
,
1501 _In_ EFI_GUID
*Protocol
1505 EfiGopGetCurrentMode (
1506 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1508 _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
*Information
1513 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1518 EfiGopGetFrameBuffer (
1519 _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL
*GopInterface
,
1520 _Out_ PHYSICAL_ADDRESS
* FrameBuffer
,
1521 _Out_ UINTN
*FrameBufferSize
1526 _In_ EFI_RESET_TYPE ResetType
1531 _In_ EFI_DEVICE_PATH
*DevicePath
1535 EfiIsDevicePathParent (
1536 _In_ EFI_DEVICE_PATH
*DevicePath1
,
1537 _In_ EFI_DEVICE_PATH
*DevicePath2
1542 _Out_ PPHYSICAL_ADDRESS FoundRsdt
1545 /* PLATFORM TIMER ROUTINES ***************************************************/
1548 BlpTimeCalibratePerformanceCounter (
1553 BlTimeQueryPerformanceCounter (
1554 _Out_opt_ PLARGE_INTEGER Frequency
1557 /* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
1560 BlpDisplayRegisterLocale (
1564 /* FONT ROUTINES *************************************************************/
1567 BfiFreeDeferredFontFile (
1568 _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
1573 _In_ PBL_DEVICE_DESCRIPTOR Device
,
1574 _In_ PWCHAR FontPath
1578 BfLoadDeferredFontFiles (
1584 _In_ PBL_GRAPHICS_CONSOLE Console
1588 BfClearToEndOfLine (
1589 _In_ PBL_GRAPHICS_CONSOLE Console
1592 /* FILESYSTEM ROUTINES *******************************************************/
1601 _In_ ULONG DeviceId
,
1603 _Out_ PBL_FILE_ENTRY
* FileEntry
1613 _In_ ULONG DeviceId
,
1615 _Out_ PBL_FILE_ENTRY
* FileEntry
1618 /* DEBUG ROUTINES ************************************************************/
1622 BlBdDebuggerEnabled (
1627 BlBdPullRemoteFile (
1628 _In_ PWCHAR FilePath
,
1629 _Out_ PVOID BaseAddress
,
1630 _Out_ PULONGLONG FileSize
1641 _In_ ULONG ErrorCode
,
1642 _In_ ULONG Parameter1
,
1643 _In_ ULONG_PTR Parameter2
,
1644 _In_ ULONG_PTR Parameter3
,
1645 _In_ ULONG_PTR Parameter4
1648 /* UTILITY ROUTINES **********************************************************/
1651 BlUtlUpdateProgress (
1652 _In_ ULONG Percentage
,
1653 _Out_opt_ PBOOLEAN Completed
1658 _Out_ PVOID
* TableAddress
,
1659 _In_ ULONG Signature
1668 BlUtlRegisterProgressRoutine (
1674 _In_ ULONG PartialSum
,
1681 BlGetApplicationBaseAndSize (
1682 _Out_ PVOID
* ImageBase
,
1683 _Out_ PULONG ImageSize
1687 BlDestroyBootEntry (
1688 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
1693 _In_
const GUID
* DataGuid
,
1695 _Inout_ PBL_PD_DATA_BLOB DataBlob
1698 /* FIRMWARE UTILITY ROUTINES *************************************************/
1701 EfiGetEfiStatusCode(
1702 _In_ NTSTATUS Status
1706 EfiGetNtStatusCode (
1707 _In_ EFI_STATUS EfiStatus
1716 BlGetApplicationIdentifier (
1721 BlpSecureBootEFIIsEnabled (
1726 BlSecureBootIsEnabled (
1727 _Out_ PBOOLEAN SecureBootEnabled
1731 BlSecureBootCheckForFactoryReset (
1735 /* RESOURCE ROUTINES *********************************************************/
1738 BlResourceFindMessage (
1743 BlResourceFindHtml (
1748 BlpResourceInitialize (
1752 /* TABLE ROUTINES ************************************************************/
1758 _In_ PBL_TBL_MAP_ROUTINE MapCallback
1765 _Out_ PULONG EntryIndex
,
1766 _In_ PBL_TBL_LOOKUP_ROUTINE Callback
,
1767 _In_ PVOID Argument1
,
1768 _In_ PVOID Argument2
,
1769 _In_ PVOID Argument3
,
1770 _In_ PVOID Argument4
1775 _Inout_ PVOID
** Table
,
1776 _Inout_ PULONG Count
,
1778 _Out_ PULONG EntryIndex
,
1779 _In_ PBL_TBL_SET_ROUTINE Callback
1783 TblDoNotPurgeEntry (
1787 /* HASH TABLE ROUTINES *******************************************************/
1792 _In_ PBL_HASH_ENTRY Entry
,
1800 _In_ PBL_HASH_ENTRY Entry
,
1801 _Out_ PBL_HASH_VALUE
*Value
1807 _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction
,
1808 _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction
,
1812 /* BCD OPTION ROUTINES *******************************************************/
1816 _In_ PBL_BCD_OPTION List
,
1821 BlGetBootOptionListSize (
1822 _In_ PBL_BCD_OPTION BcdOption
1826 BlGetBootOptionSize (
1827 _In_ PBL_BCD_OPTION BcdOption
1831 BlGetBootOptionString (
1832 _In_ PBL_BCD_OPTION List
,
1838 BlGetBootOptionInteger (
1839 _In_ PBL_BCD_OPTION List
,
1841 _Out_ PULONGLONG Value
1845 BlGetBootOptionBoolean (
1846 _In_ PBL_BCD_OPTION List
,
1848 _Out_ PBOOLEAN Value
1852 BlpGetBootOptionIntegerList (
1853 _In_ PBL_BCD_OPTION List
,
1855 _Out_ PULONGLONG
* Value
,
1856 _Out_ PULONGLONG Count
,
1861 BlGetBootOptionDevice (
1862 _In_ PBL_BCD_OPTION List
,
1864 _Out_ PBL_DEVICE_DESCRIPTOR
* Value
,
1865 _In_opt_ PBL_BCD_OPTION
* ExtraOptions
1869 BlGetBootOptionGuid (
1870 _In_ PBL_BCD_OPTION List
,
1876 BlGetBootOptionGuidList (
1877 _In_ PBL_BCD_OPTION List
,
1885 _In_ PBL_BCD_OPTION OptionList
,
1886 _Out_ PBL_BCD_OPTION
*CopiedOptions
1890 BlAppendBootOptionBoolean (
1891 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1896 BlAppendBootOptionInteger (
1897 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1898 _In_ ULONG OptionId
,
1899 _In_ ULONGLONG Value
1903 BlAppendBootOptionString (
1904 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1905 _In_ PWCHAR OptionString
1909 BlAppendBootOptions (
1910 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1911 _In_ PBL_BCD_OPTION Options
1915 BlRemoveBootOption (
1916 _In_ PBL_BCD_OPTION List
,
1921 BlReplaceBootOptions (
1922 _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
,
1923 _In_ PBL_BCD_OPTION NewOptions
1926 /* BOOT REGISTRY ROUTINES ****************************************************/
1930 _In_ HANDLE KeyHandle
1935 _In_ HANDLE ParentHandle
,
1936 _In_ PWCHAR KeyName
,
1937 _Out_ PHANDLE Handle
1942 _In_ PBL_FILE_PATH_DESCRIPTOR FilePath
,
1943 _Out_ PHANDLE HiveHandle
1947 BiGetRegistryValue (
1948 _In_ HANDLE KeyHandle
,
1949 _In_ PWCHAR ValueName
,
1951 _Out_ PVOID
* Buffer
,
1952 _Out_ PULONG ValueLength
1956 BiEnumerateSubKeys (
1957 _In_ HANDLE KeyHandle
,
1958 _Out_ PWCHAR
** SubKeyList
,
1959 _Out_ PULONG SubKeyCount
1964 _In_ HANDLE KeyHandle
1969 _In_ HANDLE KeyHandle
1972 /* CONTEXT ROUTINES **********************************************************/
1975 BlpArchSwitchContext (
1976 _In_ BL_ARCH_MODE NewMode
1980 Archx86TransferTo32BitApplicationAsm (
1984 /* MEMORY DESCRIPTOR ROUTINES ************************************************/
1987 MmMdInitializeList (
1988 _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList
,
1990 _In_ PLIST_ENTRY ListHead
1995 _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList
,
1996 _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList
,
1997 _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor
,
1998 _Out_ PULONG ActualCount
,
2005 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2010 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
2013 PBL_MEMORY_DESCRIPTOR
2014 MmMdInitByteGranularDescriptor (
2016 _In_ BL_MEMORY_TYPE Type
,
2017 _In_ ULONGLONG BasePage
,
2018 _In_ ULONGLONG VirtualPage
,
2019 _In_ ULONGLONG PageCount
2023 MmMdFreeGlobalDescriptors (
2028 MmMdAddDescriptorToList (
2029 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2030 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
,
2035 MmMdRemoveDescriptorFromList (
2036 _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2037 _In_ PBL_MEMORY_DESCRIPTOR Entry
2041 MmMdFindSatisfyingRegion (
2042 _In_ PBL_MEMORY_DESCRIPTOR Descriptor
,
2043 _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor
,
2044 _In_ ULONGLONG Pages
,
2045 _In_ PBL_ADDRESS_RANGE BaseRange
,
2046 _In_ PBL_ADDRESS_RANGE VirtualRange
,
2047 _In_ BOOLEAN TopDown
,
2048 _In_ BL_MEMORY_TYPE MemoryType
,
2050 _In_ ULONG Alignment
2054 MmMdRemoveRegionFromMdlEx (
2055 __in PBL_MEMORY_DESCRIPTOR_LIST MdList
,
2057 __in ULONGLONG BasePage
,
2058 __in ULONGLONG PageCount
,
2059 __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
2063 MmMdFreeDescriptor (
2064 _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
2067 /* PAGE ALLOCATOR ROUTINES ***************************************************/
2070 BlMmAllocatePhysicalPages(
2071 _Inout_ PPHYSICAL_ADDRESS Address
,
2072 _In_ BL_MEMORY_TYPE MemoryType
,
2073 _In_ ULONGLONG PageCount
,
2074 _In_ ULONG Attributes
,
2075 _In_ ULONG Alignment
2079 MmPapAllocatePhysicalPagesInRange (
2080 _Inout_ PPHYSICAL_ADDRESS BaseAddress
,
2081 _In_ BL_MEMORY_TYPE MemoryType
,
2082 _In_ ULONGLONG Pages
,
2083 _In_ ULONG Attributes
,
2084 _In_ ULONG Alignment
,
2085 _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList
,
2086 _In_opt_ PBL_ADDRESS_RANGE Range
,
2087 _In_ ULONG RangeType
2091 BlMmFreePhysicalPages (
2092 _In_ PHYSICAL_ADDRESS Address
2096 MmPapAllocatePagesInRange (
2097 _Inout_ PVOID
* PhysicalAddress
,
2098 _In_ BL_MEMORY_TYPE MemoryType
,
2099 _In_ ULONGLONG Pages
,
2100 _In_ ULONG Attributes
,
2101 _In_ ULONG Alignment
,
2102 _In_opt_ PBL_ADDRESS_RANGE Range
,
2108 _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap
,
2113 BlpMmInitializeConstraints (
2118 BlMmRemoveBadMemory (
2124 _In_ PLIST_ENTRY MemoryMap
,
2125 _In_ PBL_IMAGE_PARAMETERS MemoryParameters
,
2126 _In_ ULONG WhichTypes
,
2130 /* VIRTUAL MEMORY ROUTINES ***************************************************/
2133 BlMmMapPhysicalAddressEx (
2134 _In_ PVOID
* VirtualAddress
,
2135 _In_ ULONG Attributes
,
2136 _In_ ULONGLONG Size
,
2137 _In_ PHYSICAL_ADDRESS PhysicalAddress
2141 BlMmUnmapVirtualAddressEx (
2142 _In_ PVOID VirtualAddress
,
2146 /* BLOCK ALLOCATOR ROUTINES **************************************************/
2149 BlpMmCreateBlockAllocator (
2153 /* HEAP ALLOCATOR ROUTINES ***************************************************/
2165 /* DISPLAY ROUTINES **********************************************************/
2168 BlDisplayGetTextCellResolution (
2169 _Out_ PULONG TextWidth
,
2170 _Out_ PULONG TextHeight
2174 BlDisplaySetScreenResolution (
2179 BlDisplayGetScreenResolution (
2185 BlDisplayInvalidateOemBitmap (
2190 BlDisplayGetOemBitmap (
2191 _Out_ PCOORD Offset
,
2192 _Out_opt_ PULONG Flags
2196 BlDisplayValidOemBitmap (
2201 BlDisplayClearScreen (
2206 BlDisplaySetCursorType (
2210 /* I/O ROUTINES **************************************************************/
2213 BlpIoRegisterDestroyRoutine (
2214 _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
2224 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2227 _Out_ PULONG DeviceId
2231 BlDeviceGetInformation (
2232 _In_ ULONG DeviceId
,
2233 _Out_ PBL_DEVICE_INFORMATION DeviceInformation
2237 BlDeviceSetInformation (
2238 _In_ ULONG DeviceId
,
2239 _In_ PBL_DEVICE_INFORMATION DeviceInformation
2243 BlDeviceReadAtOffset (
2244 _In_ ULONG DeviceId
,
2246 _In_ ULONGLONG Offset
,
2248 _Out_ PULONG BytesRead
2251 /* IMAGE ROUTINES ************************************************************/
2254 BlImgLoadImageWithProgress2 (
2255 _In_ ULONG DeviceId
,
2256 _In_ BL_MEMORY_TYPE MemoryType
,
2257 _In_ PWCHAR FileName
,
2258 _Inout_ PVOID
* MappedBase
,
2259 _Inout_ PULONG MappedSize
,
2260 _In_ ULONG ImageFlags
,
2261 _In_ BOOLEAN ShowProgress
,
2262 _Out_opt_ PUCHAR
* HashBuffer
,
2263 _Out_opt_ PULONG HashSize
2266 PIMAGE_SECTION_HEADER
2268 _In_ PVOID ImageBase
,
2269 _In_ ULONG ImageSize
2273 BlImgLoadBootApplication (
2274 _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
,
2275 _Out_ PULONG AppHandle
2279 BlImgStartBootApplication (
2280 _In_ ULONG AppHandle
,
2281 _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
2285 BlImgUnloadBootApplication (
2286 _In_ ULONG AppHandle
2290 BlImgQueryCodeIntegrityBootOptions (
2291 _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry
,
2292 _Out_ PBOOLEAN IntegrityChecksDisabled
,
2293 _Out_ PBOOLEAN TestSigning
2296 /* FILE I/O ROUTINES *********************************************************/
2304 BlFileReadAtOffsetEx (
2307 _In_ ULONGLONG ByteOffset
,
2309 _Out_ PULONG BytesReturned
,
2314 BlFileGetInformation (
2316 _In_ PBL_FILE_INFORMATION FileInfo
2321 _In_ ULONG DeviceId
,
2322 _In_ PWCHAR FileName
,
2327 /* BLOCK I/O ROUTINES *******************************************************/
2330 BlockIoEfiCompareDevice (
2331 _In_ PBL_DEVICE_DESCRIPTOR Device
,
2332 _In_ EFI_HANDLE Handle
2335 /* INPUT CONSOLE ROUTINES ****************************************************/
2338 ConsoleInputLocalDestruct (
2339 _In_
struct _BL_INPUT_CONSOLE
* Console
2343 ConsoleInputBaseReinitialize (
2344 _In_
struct _BL_INPUT_CONSOLE
* Console
2348 ConsoleCreateLocalInputCnsole (
2352 /* TEXT CONSOLE ROUTINES *****************************************************/
2355 ConsoleGraphicalDestruct (
2356 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2360 ConsoleGraphicalClearText (
2361 _In_ PBL_GRAPHICS_CONSOLE Console
,
2362 _In_ BOOLEAN LineOnly
2366 ConsoleGraphicalClearPixels (
2367 _In_ PBL_GRAPHICS_CONSOLE Console
,
2372 ConsoleGraphicalReinitialize (
2373 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2377 ConsoleGraphicalSetTextState (
2378 _In_ PBL_GRAPHICS_CONSOLE Console
,
2380 _In_ PBL_DISPLAY_STATE TextState
2384 ConsoleGraphicalIsEnabled (
2385 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
2389 ConsoleGraphicalGetGraphicalResolution (
2390 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2391 _In_ PBL_DISPLAY_MODE DisplayMode
2395 ConsoleGraphicalGetOriginalResolution (
2396 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2397 _In_ PBL_DISPLAY_MODE DisplayMode
2401 ConsoleGraphicalEnable (
2402 _In_
struct _BL_GRAPHICS_CONSOLE
* Console
,
2407 ConsoleTextLocalDestruct (
2408 _In_
struct _BL_TEXT_CONSOLE
* Console
2412 ConsoleTextLocalReinitialize (
2413 _In_
struct _BL_TEXT_CONSOLE
* Console
2417 ConsoleTextBaseGetTextState (
2418 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2419 _Out_ PBL_DISPLAY_STATE TextState
2423 ConsoleTextLocalSetTextState (
2424 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2426 _In_ PBL_DISPLAY_STATE TextState
2430 ConsoleTextBaseGetTextResolution (
2431 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2432 _Out_ PULONG TextResolution
2436 ConsoleTextLocalSetTextResolution (
2437 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2438 _In_ ULONG NewTextResolution
,
2439 _Out_ PULONG OldTextResolution
2443 ConsoleTextLocalClearText (
2444 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2445 _In_ BOOLEAN LineOnly
2449 ConsoleTextLocalWriteText (
2450 _In_
struct _BL_TEXT_CONSOLE
* Console
,
2452 _In_ ULONG Attribute
2456 ConsoleTextLocalConstruct (
2457 _In_ PBL_TEXT_CONSOLE TextConsole
,
2458 _In_ BOOLEAN Activate
2462 ConsolepFindResolution (
2463 _In_ PBL_DISPLAY_MODE Mode
,
2464 _In_ PBL_DISPLAY_MODE List
,
2469 ConsoleFirmwareTextClear (
2470 _In_ PBL_TEXT_CONSOLE Console
,
2471 _In_ BOOLEAN LineOnly
2475 ConsoleFirmwareTextClose (
2476 _In_ PBL_TEXT_CONSOLE TextConsole
2480 ConsoleFirmwareTextOpen (
2481 _In_ PBL_TEXT_CONSOLE TextConsole
2485 ConsoleFirmwareTextSetState (
2486 _In_ PBL_TEXT_CONSOLE TextConsole
,
2488 _In_ PBL_DISPLAY_STATE State
2492 ConsoleGraphicalConstruct (
2493 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2497 ConsoleCreateRemoteConsole (
2498 _In_ PBL_TEXT_CONSOLE
* TextConsole
2502 ConsoleEfiGraphicalOpenProtocol (
2503 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2504 _In_ BL_GRAPHICS_CONSOLE_TYPE Type
2508 ConsoleFirmwareGraphicalClose (
2509 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2513 ConsoleFirmwareGraphicalDisable (
2514 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2518 ConsoleFirmwareGraphicalClear (
2519 _In_ PBL_GRAPHICS_CONSOLE Console
,
2524 ConsoleFirmwareGraphicalEnable (
2525 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2530 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2534 ConsoleEfiUgaClose (
2535 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2539 ConsoleEfiGopClose (
2540 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2545 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2549 ConsoleEfiGopEnable (
2550 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
2554 ConsoleEfiUgaSetResolution (
2555 _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
,
2556 _In_ PBL_DISPLAY_MODE DisplayMode
,
2557 _In_ ULONG DisplayModeCount
2561 ConsoleCreateLocalInputConsole (
2566 ConsoleInputLocalEraseBuffer (
2567 _In_ PBL_INPUT_CONSOLE Console
,
2568 _In_opt_ PULONG ValueToFill
2572 ConsolepClearBuffer (
2573 _In_ PUCHAR FrameBuffer
,
2575 _In_ PUCHAR FillColor
,
2577 _In_ ULONG ScanlineWidth
,
2578 _In_ ULONG PixelDepth
2582 ConsolepConvertColorToPixel (
2583 _In_ BL_COLOR Color
,
2587 extern ULONG MmDescriptorCallTreeCount
;
2588 extern ULONG BlpApplicationFlags
;
2589 extern BL_LIBRARY_PARAMETERS BlpLibraryParameters
;
2590 extern BL_TRANSLATION_TYPE MmTranslationType
;
2591 extern PBL_ARCH_CONTEXT CurrentExecutionContext
;
2592 extern PBL_DEVICE_DESCRIPTOR BlpBootDevice
;
2593 extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry
;
2594 extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
*EfiConOut
;
2595 extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL
*EfiConInEx
;
2596 extern EFI_GUID EfiGraphicsOutputProtocol
;
2597 extern EFI_GUID EfiUgaDrawProtocol
;
2598 extern EFI_GUID EfiLoadedImageProtocol
;
2599 extern EFI_GUID EfiDevicePathProtocol
;
2600 extern EFI_GUID EfiBlockIoProtocol
;
2601 extern EFI_GUID EfiSimpleTextInputExProtocol
;
2602 extern EFI_GUID EfiRootAcpiTableGuid
;
2603 extern EFI_GUID EfiRootAcpiTable10Guid
;
2604 extern EFI_GUID EfiGlobalVariable
;
2605 extern ULONG ConsoleGraphicalResolutionListFlags
;
2606 extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList
[];
2607 extern BL_DISPLAY_MODE ConsoleTextResolutionList
[];
2608 extern ULONG ConsoleGraphicalResolutionListSize
;
2609 extern PVOID DspRemoteInputConsole
;
2610 extern PVOID DspLocalInputConsole
;
2611 extern WCHAR BlScratchBuffer
[8192];
2612 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated
;
2613 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated
;
2614 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker
;
2615 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated
;
2616 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated
;
2617 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated
;
2618 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory
;
2619 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory
;
2620 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory
;
2621 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory
;
2622 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual
;
2623 extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers
;
2624 extern ULONGLONG BlpTimePerformanceFrequency
;
2625 extern LIST_ENTRY RegisteredFileSystems
;