本篇程序参考自博客“UEFI应用与编程–SmBios”https://blog.csdn.net/qyqcs/article/details/79566235
在原博主的基础上进行了一些修改,修改了几处个人觉得有问题的地方。
SmBiosList.c

#include <Uefi.h>
#include <Library/UefiLib.h>
#include <IndustryStandard/SmBios.h>
#include <Library/UefiShellDebug1CommandsLib.h>
#include <Library/LibSmbiosView.h> EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
{ EFI_STATUS                    Status;SMBIOS_TABLE_ENTRY_POINT      *mSmbiosTable   = NULL;SMBIOS_STRUCTURE_POINTER      m_SmbiosStruct;SMBIOS_STRUCTURE_POINTER      *mSmbiosStruct = &m_SmbiosStruct;SMBIOS_STRUCTURE_POINTER  Smbios;SMBIOS_STRUCTURE_POINTER  SmbiosEnd;UINT8                     *Raw;UINT16                    Handle1 = 0;UINT8                     *Buffer1;UINT16                    Length1;UINT16                    *Handle;UINT8                     **Buffer;UINT16                    *Length;UINT8                     Type;mSmbiosTable = NULL;//// Get SMBIOS table from System Configure table//Status = GetSystemConfigurationTable(&gEfiSmbiosTableGuid,(VOID**)&mSmbiosTable);if (mSmbiosTable == NULL){Print(L"%r.\n",Status);}//// Init SMBIOS structure table address//mSmbiosStruct->Raw  = (UINT8 *)(UINTN)(mSmbiosTable->TableAddress);////Find the structure//Handle = &Handle1;Length = &Length1;Buffer = &Buffer1;*Length       = 0;Smbios.Hdr    = mSmbiosStruct->Hdr;SmbiosEnd.Raw = Smbios.Raw + mSmbiosTable->TableLength;Print(L"TableLenth:%02d\n",mSmbiosTable->TableLength);while (Smbios.Raw < SmbiosEnd.Raw){if (Smbios.Hdr->Handle == *Handle){Raw = Smbios.Raw;Type = Smbios.Hdr->Type;//// Walk to next structure//LibGetSmbiosString(&Smbios,(UINT16)(-1));//// Length = Next structure head - this structure head//*Length = (UINT16)(Smbios.Raw - Raw);*Buffer = Raw;//// update with the next structure handle.//if (Smbios.Raw < SmbiosEnd.Raw){*Handle = Smbios.Hdr->Handle;} else{*Handle = (UINT16)(-1);}Print(L"Handle:%04x Type:%04d Address:%08x Length:%04x\n", *Handle - 1, Type, *Buffer, *Length);DumpHex(2, 0, *Length, *Buffer);//return DMI_SUCCESS;}}*Handle = (UINT16)(-1);return EFI_SUCCESS;
}

注意:由于用edk2中的nt32虚拟机编译时找不到shellpkg里面的UefiShellDebug1CommandsLib.h和LibSmbiosView.h,故将其移动edk2\MdePkg\Include\Library目录内。
SmBiosList.inf

[Defines]  INF_VERSION             = 0x00010005  BASE_NAME               = SmBiosRead  FILE_GUID               = dc72d2c7-a48a-42fd-80b6-9d229d9943c8  MODULE_TYPE             = UEFI_APPLICATION  VERSION_STRING          = 1.0  ENTRY_POINT             = UefiMain [Sources]  SmBiosList.c
[Packages]  MdePkg/MdePkg.dec  MdeModulePkg/MdeModulePkg.decShellPkg/ShellPkg.dec[LibraryClasses]  UefiLibUefiApplicationEntryPointPrintLibUefiShellDebug1CommandsLib[Protocols]  [Ppis]  [Guids]  gEfiSmbiosTableGuid
[BuildOptions]

亲测

UEFI标准应用程序模块--SMBIOS的读写相关推荐

  1. C++标准库实现WAV文件读写

    C++标准库实现WAV文件读写 在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依 ...

  2. STM32F103标准库开发---SPI实验---读写 W25Q128 外部 Flash

    STM32F103标准库开发----目录 W25Q128读写----程序源码----点击下载 W25Qxx全系列数据手册-点击下载 一.实验前期准备 本次实验的 MCU 是 STM32F103C8T6 ...

  3. aerials标准测试图像_Python 图像读写谁最快?不信就比一比

    图像处理,顾名思义,是对图像进行的各种转换.计算等处理.图像处理必不可少地需要读写图像文件. 图像文件的读取,就是将图像数据从磁盘中的文件内读入内存,之后按照图像解码标准解码,最后把图像各像素的值存储 ...

  4. UEFI标准与架构简介

    参考文档:Vincent Zimmer, Michael Rothman, Suresh Marisetty - Beyond BIOS_ Developing with the Unified Ex ...

  5. uefi中的Smbios实现

    需要了解的Smbios知识: (1)什么是Smbios: Smbios在百度百科中是这样解释的:Smbios(system management bios)是主板或者系统制造厂商以标准格式显示产品信息 ...

  6. STM32F10x_硬件I2C读写EEPROM(标准外设库版本)

    Ⅰ.写在前面 上一篇文章是"STM32F10x_模拟I2C读写EEPROM",讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程. 上一篇文章主要 ...

  7. 检测到磁盘可能为uefi引导_无法安装windows,因为这台电脑的磁盘布局不受UEFI固件支持”,这是怎么回事呢?...

    0. 问题: 无法安装windows,因为这台电脑的磁盘布局不受UEFI固件支持",这是怎么回事呢? UEFI是Unified Extensible Firmware Interface的英 ...

  8. 使用Rust开发操作系统(UEFI基本介绍)

    UEFI基本介绍 关于UEFI BIOS UEFI介绍 引导管理 UEFI Image UEFI 应用程序 OS Loader UEFI运行时服务 调用约定 调用约定的数据类型 IA-32架构调用约定 ...

  9. 固件:BIOS和UEFI

    固件:开机时运行,进行硬件初始化.引导操作系统.为操作系统和程序提供运行环境的程序 主要分为传统的BIOS和新式UEFI两类. 1. BIOS BIOS :(Basic Input Output Sy ...

最新文章

  1. Swift之Delegate/闭包
  2. mysql查询结果单位换算后小数位数的保留方式
  3. html pc vw过大,细说em/rem/vh/vw与响应式布局
  4. GDCM:提取DICOM文件的加密内容到der文件的测试程序
  5. Activity容器控件
  6. Product Long text - children usage
  7. oracle unpivot 空值,sql – 处理UNPIVOT中的NULL值
  8. 【MySQL】浅谈一致性读
  9. 【问答语录】为什么各大公司请敏捷开发咨询顾问,都偏向项目管理,是不是偏了?没有核心技术思想,管理能解决实质问题?
  10. 欢迎关注微信公众号Android系统攻城狮,会持续分享技术输出!!!
  11. grasshopper for rhino 6下载_漫谈算法设计与脚本语言(grasshopper, python)
  12. 高通又不务正业做WiFi了?那你可能想错了
  13. 2008年希赛软考学院招生
  14. 第六天、用户、组、权限、grep
  15. .com与.top域名有什么区别
  16. 回顾大一|我们要做的是提前准备,而不是提前焦虑
  17. 2019,我的工作寻找之路
  18. 基于运动学模型的轨迹跟踪控制
  19. 几款常见蓝牙芯片整理
  20. 用NetTerm连接虚拟机的telnet服务,打造轻松自如的虚拟机实验环境

热门文章

  1. 中岛美嘉 ,经我也想过一了百
  2. ivms虚拟服务器,ivms监控服务器地址
  3. 【EARLIER/EARLIEST函数】引用不存在的更早的行上下文 报错解决
  4. OPA1611AIDR IC AUDIO 1 CIRCUIT 8SOIC
  5. mac怎么切换输入法(在外接键盘下)
  6. Ural1671 Anansi's Cobweb
  7. 「中民知慧教育」已完成近千万种子轮融资
  8. Winform 俄罗斯方块儿练习
  9. 什么是高匿代理、匿名代理和透明代理?它们有什么区别?
  10. html表格制作旅游网页,简单实用的网页表格特效_html