J'essaie d'appeler la fonction BootServices->GetMemoryMap()
, mais la définition de la fonction et la documentation n'ont aucun sens pour moi. La spécification UEFI (v2.6) dit que la définition de la fonction est (page: 207):Confusion de documentation pour BootServices UEFI-> GetMemoryMap()
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);
Mais la section Paramètres dit:
MemoryMap: Un pointeur vers la mémoire tampon dans lequel le firmware place la carte mémoire actuelle . La carte est un tableau de EFI_MEMORY_DESCRIPTORs.
Si la carte mémoire est un tableau de EFI_MEMORY_DESCRIPTOR
s et le paramètre est censé être un pointeur vers un tampon, comment le type du paramètre est IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap
, devrait-il pas IN OUT EFI_MEMORY_DESCRIPTOR **MemoryMap
?
Il est écrit "Un pointeur vers le tampon dans lequel le micrologiciel place la carte mémoire en cours." Un tableau est un pointeur vers un tampon. Peut-être interpréter comme ceci, 'Un pointeur vers le tampon (première adresse de mémoire du tampon) dans lequel ...' '** MemoryMap' serait l'adresse d'encore une autre adresse qui est l'imitation du tampon. Ce serait donc un pointeur vers un pointeur. –
Cela dépend de la signification de l'auteur du mot tampon. En fonction, il s'agirait d'une adresse mais, en termes courants, ce serait toute la zone d'adresse qui constituerait le tampon. Dans le dernier, il semble qu'il n'y ait pas de contradiction, donc soit il y a une erreur, soit le contexte révèle qu'il ne se réfère pas à la définition fonctionnelle exacte du tampon. –
@marshalcraft: Merci, j'ai compris. Il semble un peu étrange qu'ils le fassent. – nom