UEFI标准应用程序模块--SMBIOS的读写
本篇程序参考自博客“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的读写相关推荐
- C++标准库实现WAV文件读写
C++标准库实现WAV文件读写 在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依 ...
- STM32F103标准库开发---SPI实验---读写 W25Q128 外部 Flash
STM32F103标准库开发----目录 W25Q128读写----程序源码----点击下载 W25Qxx全系列数据手册-点击下载 一.实验前期准备 本次实验的 MCU 是 STM32F103C8T6 ...
- aerials标准测试图像_Python 图像读写谁最快?不信就比一比
图像处理,顾名思义,是对图像进行的各种转换.计算等处理.图像处理必不可少地需要读写图像文件. 图像文件的读取,就是将图像数据从磁盘中的文件内读入内存,之后按照图像解码标准解码,最后把图像各像素的值存储 ...
- UEFI标准与架构简介
参考文档:Vincent Zimmer, Michael Rothman, Suresh Marisetty - Beyond BIOS_ Developing with the Unified Ex ...
- uefi中的Smbios实现
需要了解的Smbios知识: (1)什么是Smbios: Smbios在百度百科中是这样解释的:Smbios(system management bios)是主板或者系统制造厂商以标准格式显示产品信息 ...
- STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
Ⅰ.写在前面 上一篇文章是"STM32F10x_模拟I2C读写EEPROM",讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程. 上一篇文章主要 ...
- 检测到磁盘可能为uefi引导_无法安装windows,因为这台电脑的磁盘布局不受UEFI固件支持”,这是怎么回事呢?...
0. 问题: 无法安装windows,因为这台电脑的磁盘布局不受UEFI固件支持",这是怎么回事呢? UEFI是Unified Extensible Firmware Interface的英 ...
- 使用Rust开发操作系统(UEFI基本介绍)
UEFI基本介绍 关于UEFI BIOS UEFI介绍 引导管理 UEFI Image UEFI 应用程序 OS Loader UEFI运行时服务 调用约定 调用约定的数据类型 IA-32架构调用约定 ...
- 固件:BIOS和UEFI
固件:开机时运行,进行硬件初始化.引导操作系统.为操作系统和程序提供运行环境的程序 主要分为传统的BIOS和新式UEFI两类. 1. BIOS BIOS :(Basic Input Output Sy ...
最新文章
- Swift之Delegate/闭包
- mysql查询结果单位换算后小数位数的保留方式
- html pc vw过大,细说em/rem/vh/vw与响应式布局
- GDCM:提取DICOM文件的加密内容到der文件的测试程序
- Activity容器控件
- Product Long text - children usage
- oracle unpivot 空值,sql – 处理UNPIVOT中的NULL值
- 【MySQL】浅谈一致性读
- 【问答语录】为什么各大公司请敏捷开发咨询顾问,都偏向项目管理,是不是偏了?没有核心技术思想,管理能解决实质问题?
- 欢迎关注微信公众号Android系统攻城狮,会持续分享技术输出!!!
- grasshopper for rhino 6下载_漫谈算法设计与脚本语言(grasshopper, python)
- 高通又不务正业做WiFi了?那你可能想错了
- 2008年希赛软考学院招生
- 第六天、用户、组、权限、grep
- .com与.top域名有什么区别
- 回顾大一|我们要做的是提前准备,而不是提前焦虑
- 2019,我的工作寻找之路
- 基于运动学模型的轨迹跟踪控制
- 几款常见蓝牙芯片整理
- 用NetTerm连接虚拟机的telnet服务,打造轻松自如的虚拟机实验环境