BootServices->GetMemoryMap()
関数を呼び出そうとしていますが、関数の定義とドキュメントは意味がありません。UEFIのBootServices-> 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);
しかし、パラメータセクションは言う:
メモリマップ:UEFI仕様(V2.6)は、関数の定義は(:207ページ)であると述べているバッファへのポインタファームウェアは現在のメモリマップを に置きます。マップは EFI_MEMORY_DESCRIPTORの配列です。メモリマップは
EFI_MEMORY_DESCRIPTOR
の配列であり、パラメータは、バッファへのポインタであると考えられる場合
、どのようにパラメータの型がIN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap
をすることができ、それはIN OUT EFI_MEMORY_DESCRIPTOR **MemoryMap
すべきではありませんか?
「ファームウェアが現在のメモリマップを配置するバッファへのポインタ」と書かれています。配列は間違いなくバッファへのポインタです。たぶんこのように解釈すると、 'バッファへのポインタ(バッファの最初のメモリアドレス)...' '** MemoryMap''は、バッファのビージングであるさらに別のアドレスのアドレスになります。したがって、ポインタへのポインタになります。 –
著者のワードバッファーの意味に依存します。機能上はアドレスになりますが、一般的に言えば、バッファを構成するアドレスの全領域です。後では矛盾がないように見えるので、間違いがあるか、バッファの正確な機能的定義を参照していない文脈が明らかになる。 –
@marshalcraft:ありがとう、私はそれを得た。彼らがこれをするのはちょっと奇妙なようです。 – nom