#include <UgaDraw.h>
#include <BlockIo.h>
#include <Acpi.h>
+#include <GlobalVariable.h>
/* Registry Headers */
#define __FREELDR_H
/* DEFINES *******************************************************************/
+DEFINE_GUID(BadMemoryGuid, 0x54B8275B, 0xD431, 0x473F, 0xAC, 0xFB, 0xE5, 0x36, 0xA0, 0x84, 0x94, 0xA3);
+
#define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
#define BL_APP_ENTRY_SIGNATURE "BTAPENT"
#define BL_RETURN_ARGUMENTS_VERSION 1
#define BL_FIRMWARE_DESCRIPTOR_VERSION 2
+#define BL_RETURN_ARGUMENTS_NO_PAE_FLAG 0x40
+
#define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
#define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
+#define BL_APPLICATION_ENTRY_WINLOAD 0x04
+#define BL_APPLICATION_ENTRY_STARTUP 0x08
#define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
+#define BL_APPLICATION_ENTRY_NTLDR 0x40
#define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
+#define BL_APPLICATION_ENTRY_WINRESUME 0x100
+#define BL_APPLICATION_ENTRY_SETUPLDR 0x200
+#define BL_APPLICATION_ENTRY_BOOTSECTOR 0x400
+#define BL_APPLICATION_ENTRY_BOOTMGR 0x1000
+#define BL_APPLICATION_ENTRY_DISPLAY_ORDER 0x800000
+#define BL_APPLICATION_ENTRY_FIXED_SEQUENCE 0x20000000
+#define BL_APPLICATION_ENTRY_RECOVERY 0x40000000
#define BL_CONTEXT_PAGING_ON 1
#define BL_CONTEXT_INTERRUPTS_ON 2
#define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
#define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
#define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
+#define BL_MM_ADD_DESCRIPTOR_ALLOCATE_FLAG 0x1000
#define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
+#define BL_MM_INCLUDE_MAPPED_ALLOCATED 0x01
+#define BL_MM_INCLUDE_MAPPED_UNALLOCATED 0x02
+#define BL_MM_INCLUDE_UNMAPPED_ALLOCATED 0x04
+#define BL_MM_INCLUDE_UNMAPPED_UNALLOCATED 0x08
+#define BL_MM_INCLUDE_RESERVED_ALLOCATED 0x10
+#define BL_MM_INCLUDE_BAD_MEMORY 0x20
+#define BL_MM_INCLUDE_FIRMWARE_MEMORY 0x40
+#define BL_MM_INCLUDE_TRUNCATED_MEMORY 0x80
+#define BL_MM_INCLUDE_PERSISTENT_MEMORY 0x100
+#define BL_MM_INCLUDE_FIRMWARE_MEMORY_2 0x200
+
+#define BL_MM_INCLUDE_NO_FIRMWARE_MEMORY (BL_MM_INCLUDE_PERSISTENT_MEMORY | \
+ BL_MM_INCLUDE_TRUNCATED_MEMORY | \
+ BL_MM_INCLUDE_BAD_MEMORY | \
+ BL_MM_INCLUDE_RESERVED_ALLOCATED | \
+ BL_MM_INCLUDE_UNMAPPED_UNALLOCATED | \
+ BL_MM_INCLUDE_UNMAPPED_ALLOCATED | \
+ BL_MM_INCLUDE_MAPPED_UNALLOCATED | \
+ BL_MM_INCLUDE_MAPPED_ALLOCATED)
+C_ASSERT(BL_MM_INCLUDE_NO_FIRMWARE_MEMORY == 0x1BF);
+
+#define BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY (BL_MM_INCLUDE_FIRMWARE_MEMORY_2 | \
+ BL_MM_INCLUDE_FIRMWARE_MEMORY)
+C_ASSERT(BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY == 0x240);
+
#define BL_MM_REQUEST_DEFAULT_TYPE 1
#define BL_MM_REQUEST_TOP_DOWN_TYPE 2
+#define BL_MM_REMOVE_PHYSICAL_REGION_FLAG 0x40000000
#define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
#define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
#define BL_FS_REGISTER_AT_HEAD_FLAG 1
#define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
+#define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
+#define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
#define BL_MEMORY_CLASS_SHIFT 28
#define BL_FILE_ENTRY_READ_ACCESS 0x02
#define BL_FILE_ENTRY_WRITE_ACCESS 0x04
#define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
+#define BL_FILE_ENTRY_DIRECTORY 0x10000
+
+#define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
#define BL_IMG_VALID_FILE 0x01
#define BL_IMG_MEMORY_FILE 0x02
#define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
#define BL_LOAD_IMG_COMPUTE_HASH 0x40000
+#define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
+#define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
+#define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
+#define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
+#define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
+#define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
+#define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
+#define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
+#define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
+
+#define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
+#define BL_UTL_CHECKSUM_ROTATE 0x20000
+#define BL_UTL_CHECKSUM_NEGATE 0x40000
+#define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
+#define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
+
/* ENUMERATIONS **************************************************************/
typedef enum _BL_COLOR
White
} BL_COLOR, *PBL_COLOR;
+typedef enum _BL_MENU_POLICY
+{
+ MenuPolicyLegacy = 0,
+ MenuPolicyStandard = 1
+} BL_MENU_POLICY;
+
typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
{
BlMdPhysical,
BlMdVirtual,
+ BlMdTracker
} BL_MEMORY_DESCRIPTOR_TYPE;
typedef enum _BL_TRANSLATION_TYPE
BlLoaderPageDirectory = 0xD0000006,
BlLoaderReferencePage = 0xD0000007,
BlLoaderRamDisk = 0xD0000008,
+ BlLoaderArchData = 0xD0000009,
BlLoaderData = 0xD000000A,
BlLoaderRegistry = 0xD000000B,
BlLoaderBlockMemory = 0xD000000C,
BlMemoryUnknown = 0x00010000,
BlMemoryNonFixed = 0x00020000,
BlMemoryFixed = 0x00040000,
- BlMemoryReserved = 0x00080000,
- BlMemoryValidAllocationAttributes = BlMemoryNonFixed | BlMemoryFixed | BlMemoryReserved | BlMemoryUnknown,
+ BlMemoryBelow1MB = 0x00080000,
+ BlMemoryValidAllocationAttributes = BlMemoryNonFixed | BlMemoryFixed | BlMemoryBelow1MB | BlMemoryUnknown,
BlMemoryValidAllocationAttributeMask = 0x00FF0000,
//
BlMemoryCoalesced = 0x02000000,
BlMemoryUpdate = 0x04000000,
BlMemoryNonFirmware = 0x08000000,
+ BlMemoryPersistent = 0x10000000,
BlMemorySpecial = 0x20000000,
BlMemoryFirmware = 0x80000000,
- BlMemoryValidTypeAttributes = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemorySpecial | BlMemoryFirmware,
+ BlMemoryValidTypeAttributes = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemoryPersistent | BlMemorySpecial | BlMemoryFirmware,
BlMemoryValidTypeAttributeMask = 0xFF000000,
} BL_MEMORY_ATTR;
VOID
);
-
/* DATA STRUCTURES ***********************************************************/
typedef struct _BL_LIBRARY_PARAMETERS
{
ULONG Version;
NTSTATUS Status;
- ULONG ReturnArgumentData[5];
+ ULONG Flags;
+ ULONGLONG DataSize;
+ ULONGLONG DataPage;
} BL_RETURN_ARGUMENTS, *PBL_RETURN_ARGUMENTS;
typedef struct _BL_MEMORY_DESCRIPTOR
PBL_BCD_OPTION BcdData;
} BL_LOADED_APPLICATION_ENTRY, *PBL_LOADED_APPLICATION_ENTRY;
+typedef struct _BL_MENU_STATUS
+{
+ union
+ {
+ struct
+ {
+ ULONG AnyKey : 1;
+ ULONG AdvancedOptions : 1;
+ ULONG BootOptions : 1;
+ ULONG OemKey : 1;
+ ULONG Exit : 1;
+ ULONG Reserved : 27;
+ };
+ ULONG AsULong;
+ };
+ ULONG BootIndex;
+ WCHAR KeyValue;
+} BL_MENU_STATUS, *PL_MENU_STATUS;
+
+typedef enum _BL_BOOT_ERROR_STATUS
+{
+ Reboot = 1,
+ Recover = 2,
+ RecoverOem = 3,
+ OsSelection = 4,
+ NextOs = 5,
+ TryAgain = 6,
+ AdvancedOptions = 7,
+ BootOptions = 8
+} BL_BOOT_ERROR_STATUS;
+
typedef struct _BL_HARDDISK_DEVICE
{
ULONG PartitionType;
LARGE_INTEGER ImageSize;
ULONG ImageOffset;
} RamDisk;
+
+ ULONG File; // unknown for now
};
-} BL_LOCAL_DEVICE;
+} BL_LOCAL_DEVICE, *PBL_LOCAL_DEVICE;
typedef struct _BL_DEVICE_DESCRIPTOR
{
PWCHAR FileName;
} BL_IMG_FILE, *PBL_IMG_FILE;
+typedef struct _BL_IMAGE_APPLICATION_ENTRY
+{
+ PBL_APPLICATION_ENTRY AppEntry;
+ PVOID ImageBase;
+ ULONG ImageSize;
+} BL_IMAGE_APPLICATION_ENTRY, *PBL_IMAGE_APPLICATION_ENTRY;
+
+typedef struct _BL_IMAGE_PARAMETERS
+{
+ PVOID Buffer;
+ ULONG ActualSize;
+ ULONG BufferSize;
+} BL_IMAGE_PARAMETERS, *PBL_IMAGE_PARAMETERS;
+
typedef struct _BL_DEFERRED_FONT_FILE
{
LIST_ENTRY ListEntry;
ULONG Y;
} COORD, *PCOORD;
+typedef struct _BL_PD_DATA_BLOB
+{
+ PVOID Data;
+ ULONG DataSize;
+ ULONG BlobSize;
+} BL_PD_DATA_BLOB, *PBL_PD_DATA_BLOB;
+
/* INLINE ROUTINES ***********************************************************/
FORCEINLINE
InitializeListHead(&List->ListHead);
List->First = &List->ListHead;
List->This = NULL;
+ List->Type = 0;
}
/* INITIALIZATION ROUTINES ***************************************************/
_In_ ULONG Flags
);
+NTSTATUS
+BlpDisplayReinitialize (
+ VOID
+ );
+
VOID
BlDestroyLibrary (
VOID
...
);
+NTSTATUS
+BlFwGetParameters(
+ _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
+ );
+
+NTSTATUS
+BlFwEnumerateDevice (
+ _In_ PBL_DEVICE_DESCRIPTOR Device
+ );
+
NTSTATUS
EfiAllocatePages (
_In_ ULONG Type,
_Out_ PPHYSICAL_ADDRESS FoundRsdt
);
+NTSTATUS
+EfiFreePages (
+ _In_ ULONG Pages,
+ _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
+ );
+
/* PLATFORM TIMER ROUTINES ***************************************************/
NTSTATUS
VOID
);
+ULONGLONG
+BlTimeQueryPerformanceCounter (
+ _Out_opt_ PLARGE_INTEGER Frequency
+ );
+
+ULONGLONG
+BlArchGetPerformanceCounter (
+ VOID
+ );
+
/* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
NTSTATUS
/* UTILITY ROUTINES **********************************************************/
+VOID
+BlArchCpuId (
+ _In_ ULONG Function,
+ _In_ ULONG SubFunction,
+ _Out_ INT* Result
+ );
+
+BOOLEAN
+BlArchIsCpuIdFunctionSupported (
+ _In_ ULONG Function
+ );
+
VOID
BlUtlUpdateProgress (
_In_ ULONG Percentage,
_In_ ULONG Signature
);
+NTSTATUS
+BlUtlInitialize (
+ VOID
+ );
+
+NTSTATUS
+BlUtlRegisterProgressRoutine (
+ VOID
+ );
+
+ULONG
+BlUtlCheckSum (
+ _In_ ULONG PartialSum,
+ _In_ PUCHAR Buffer,
+ _In_ ULONG Length,
+ _In_ ULONG Flags
+ );
+
+NTSTATUS
+BlGetApplicationBaseAndSize (
+ _Out_ PVOID* ImageBase,
+ _Out_ PULONG ImageSize
+ );
+
+VOID
+BlDestroyBootEntry (
+ _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
+ );
+
+NTSTATUS
+BlPdQueryData (
+ _In_ const GUID* DataGuid,
+ _In_ PVOID Unknown,
+ _Inout_ PBL_PD_DATA_BLOB DataBlob
+ );
+
+/* FIRMWARE UTILITY ROUTINES *************************************************/
+
EFI_STATUS
EfiGetEfiStatusCode(
_In_ NTSTATUS Status
_In_ EFI_STATUS EfiStatus
);
-NTSTATUS
-BlUtlInitialize (
- VOID
- );
-
VOID
BlFwReboot (
VOID
);
+NTSTATUS
+MmFwFreePages (
+ _In_ ULONG BasePage,
+ _In_ ULONG PageCount
+ );
+
PGUID
BlGetApplicationIdentifier (
VOID
);
NTSTATUS
-BlGetApplicationBaseAndSize (
- _Out_ PVOID* ImageBase,
- _Out_ PULONG ImageSize
+BlpSecureBootEFIIsEnabled (
+ VOID
);
+NTSTATUS
+BlSecureBootIsEnabled (
+ _Out_ PBOOLEAN SecureBootEnabled
+ );
+
+NTSTATUS
+BlSecureBootCheckForFactoryReset (
+ VOID
+ );
+
+/* RESOURCE ROUTINES *********************************************************/
+
PWCHAR
BlResourceFindMessage (
_In_ ULONG MsgId
_In_opt_ PBL_BCD_OPTION* ExtraOptions
);
+NTSTATUS
+BlGetBootOptionGuid (
+ _In_ PBL_BCD_OPTION List,
+ _In_ ULONG Type,
+ _Out_ PGUID Value
+ );
+
NTSTATUS
BlGetBootOptionGuidList (
_In_ PBL_BCD_OPTION List,
_Out_ PBL_BCD_OPTION *CopiedOptions
);
+NTSTATUS
+BlAppendBootOptionBoolean (
+ _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+ _In_ ULONG OptionId
+ );
+
+NTSTATUS
+BlAppendBootOptionInteger (
+ _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+ _In_ ULONG OptionId,
+ _In_ ULONGLONG Value
+ );
+
+NTSTATUS
+BlAppendBootOptionString (
+ _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+ _In_ PWCHAR OptionString
+ );
+
NTSTATUS
BlAppendBootOptions (
_In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
_In_ PBL_BCD_OPTION Options
);
+VOID
+BlRemoveBootOption (
+ _In_ PBL_BCD_OPTION List,
+ _In_ ULONG Type
+ );
+
+NTSTATUS
+BlReplaceBootOptions (
+ _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
+ _In_ PBL_BCD_OPTION NewOptions
+ );
+
/* BOOT REGISTRY ROUTINES ****************************************************/
VOID
BiGetRegistryValue (
_In_ HANDLE KeyHandle,
_In_ PWCHAR ValueName,
- _In_ PWCHAR KeyName,
_In_ ULONG Type,
_Out_ PVOID* Buffer,
_Out_ PULONG ValueLength
_Out_ PULONG SubKeyCount
);
+NTSTATUS
+BiDeleteKey (
+ _In_ HANDLE KeyHandle
+ );
+
VOID
BiDereferenceHive (
_In_ HANDLE KeyHandle
_In_ BL_ARCH_MODE NewMode
);
+VOID
+Archx86TransferTo32BitApplicationAsm (
+ VOID
+ );
+
/* MEMORY DESCRIPTOR ROUTINES ************************************************/
+VOID
+MmMdInitializeList (
+ _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList,
+ _In_ ULONG Type,
+ _In_ PLIST_ENTRY ListHead
+ );
+
+PBL_MEMORY_DESCRIPTOR
+MmMdFindDescriptor (
+ _In_ ULONG WhichList,
+ _In_ ULONG Flags,
+ _In_ ULONGLONG Page
+ );
+
+PBL_MEMORY_DESCRIPTOR
+MmMdFindDescriptorFromMdl (
+ _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
+ _In_ ULONG Flags,
+ _In_ ULONGLONG Page
+ );
+
+NTSTATUS
+MmMdCopyList (
+ _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList,
+ _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList,
+ _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor,
+ _Out_ PULONG ActualCount,
+ _In_ ULONG Count,
+ _In_ ULONG Flags
+ );
+
+ULONG
+MmMdCountList (
+ _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
+ );
+
VOID
MmMdFreeList(
_In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
);
NTSTATUS
+MmPaReleaseSelfMapPages (
+ _In_ PHYSICAL_ADDRESS Address
+ );
+
+NTSTATUS
+MmPaReserveSelfMapPages (
+ _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
+ _In_ ULONG Alignment,
+ _In_ ULONG PageCount
+ );
+NTSTATUS
BlMmFreePhysicalPages (
_In_ PHYSICAL_ADDRESS Address
);
+NTSTATUS
+MmPapFreePages (
+ _In_ PVOID Address,
+ _In_ ULONG WhichList
+ );
+
NTSTATUS
MmPapAllocatePagesInRange (
_Inout_ PVOID* PhysicalAddress,
VOID
);
+NTSTATUS
+BlMmGetMemoryMap (
+ _In_ PLIST_ENTRY MemoryMap,
+ _In_ PBL_IMAGE_PARAMETERS MemoryParameters,
+ _In_ ULONG WhichTypes,
+ _In_ ULONG Flags
+ );
+
/* VIRTUAL MEMORY ROUTINES ***************************************************/
+NTSTATUS
+MmSelectMappingAddress (
+ _Out_ PVOID* MappingAddress,
+ _In_ ULONGLONG Size,
+ _In_ ULONG AllocationAttributes,
+ _In_ ULONG Flags,
+ _In_ PHYSICAL_ADDRESS PhysicalAddress
+ );
+
+NTSTATUS
+MmMapPhysicalAddress (
+ _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
+ _Out_ PVOID* VirtualAddress,
+ _Inout_ PULONGLONG Size,
+ _In_ ULONG CacheAttributes
+ );
+
+NTSTATUS
+MmUnmapVirtualAddress (
+ _Inout_ PVOID* VirtualAddress,
+ _Inout_ PULONGLONG Size
+ );
+
NTSTATUS
BlMmMapPhysicalAddressEx (
_In_ PVOID* VirtualAddress,
_In_ ULONGLONG Size
);
+BOOLEAN
+BlMmTranslateVirtualAddress (
+ _In_ PVOID VirtualAddress,
+ _Out_ PPHYSICAL_ADDRESS PhysicalAddress
+ );
+
+BOOLEAN
+MmArchTranslateVirtualAddress (
+ _In_ PVOID VirtualAddress,
+ _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress,
+ _Out_opt_ PULONG CachingFlags
+ );
+
/* BLOCK ALLOCATOR ROUTINES **************************************************/
NTSTATUS
_In_ ULONG ImageSize
);
+NTSTATUS
+BlImgLoadBootApplication (
+ _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
+ _Out_ PULONG AppHandle
+ );
+
+NTSTATUS
+BlImgStartBootApplication (
+ _In_ ULONG AppHandle,
+ _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
+ );
+
+NTSTATUS
+BlImgUnloadBootApplication (
+ _In_ ULONG AppHandle
+ );
+
+VOID
+BlImgQueryCodeIntegrityBootOptions (
+ _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry,
+ _Out_ PBOOLEAN IntegrityChecksDisabled,
+ _Out_ PBOOLEAN TestSigning
+ );
+
/* FILE I/O ROUTINES *********************************************************/
NTSTATUS
_Out_ PULONG FileId
);
+/* BLOCK I/O ROUTINES *******************************************************/
+
+NTSTATUS
+BlockIoEfiCompareDevice (
+ _In_ PBL_DEVICE_DESCRIPTOR Device,
+ _In_ EFI_HANDLE Handle
+ );
+
/* INPUT CONSOLE ROUTINES ****************************************************/
VOID
extern EFI_GUID EfiSimpleTextInputExProtocol;
extern EFI_GUID EfiRootAcpiTableGuid;
extern EFI_GUID EfiRootAcpiTable10Guid;
+extern EFI_GUID EfiGlobalVariable;
extern ULONG ConsoleGraphicalResolutionListFlags;
extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList[];
extern BL_DISPLAY_MODE ConsoleTextResolutionList[];
extern PVOID DspRemoteInputConsole;
extern PVOID DspLocalInputConsole;
extern WCHAR BlScratchBuffer[8192];
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker;
extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual;
+extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers;
+extern ULONGLONG BlpTimePerformanceFrequency;
+extern LIST_ENTRY RegisteredFileSystems;
+
#endif