+ NTSTATUS Status;
+ PIMAGE_NT_HEADERS NtHeaders;
+ BL_IMAGE_PARAMETERS MemoryParameters;
+ LIST_ENTRY MemoryList;
+
+ Status = RtlImageNtHeaderEx(0, ImageBase, ImageSize, &NtHeaders);
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+
+ MemoryParameters.BufferSize = 0;
+
+ Status = BlMmGetMemoryMap(&MemoryList,
+ &MemoryParameters,
+ BL_MM_INCLUDE_FIRMWARE_MEMORY |
+ BL_MM_INCLUDE_MAPPED_ALLOCATED |
+ BL_MM_INCLUDE_MAPPED_UNALLOCATED |
+ BL_MM_INCLUDE_UNMAPPED_ALLOCATED |
+ BL_MM_INCLUDE_RESERVED_ALLOCATED,
+ 0);
+ if ((Status != STATUS_BUFFER_TOO_SMALL) && (Status != STATUS_SUCCESS))
+ {
+ return Status;
+ }
+