我试图调用BootServices->GetMemoryMap()
函数,但函数定义和文档对我来说没有意义。 UEFI规范(v2.6)说该函数的定义是(page:207):
typedef EFI_STATUS(EFIAPI *EFI_GET_MEMORY_MAP)(IN OUT UINTN *MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, OUT UINTN *MapKey, OUT UINTN *DescriptorSize, OUT UINT32 *DescriptorVersion);
但参数部分说:
MemoryMap :指向固件放置当前缓冲区的指针 记忆图。地图是一个数组 EFI_MEMORY_DESCRIPTORs。
如果内存映射是一个EFI_MEMORY_DESCRIPTOR
的数组,并且该参数应该是指向缓冲区的指针,那么参数的类型如何是IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap
,不应该是IN OUT EFI_MEMORY_DESCRIPTOR **MemoryMap
。是public class Test extends Object {
public Test() {}
public void someMethod() {}
}
?
答案 0 :(得分:1)
地图是EFI_MEMORY_DESCRIPTORs的数组。
如果地图是EFI_MEMORY_DESCRIPTOR
s的数组,那么数组的名称会衰减到指向该数组中第一个元素的指针,即
EFI_MEMORY_DESCRIPTOR *MemoryMap
所以给定了函数
EFI_STATUS efi_get_memorymap(IN OUT UINTN *MemoryMapSize,
IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, ...);
和描述符地图
EFI_MEMORY_DESCRIPTOR memory_map[2];
你可以这样传递数组:
status = efi_get_memorymap(size, memory_map, ...);