SmbiosUpdate.c
/*
* SmbiosUpdate.c
*
* Created on: 2018年3月2日
* Author:
*/
#include <Uefi.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>
#include <Protocol/Smbios.h>
#include "UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h"
INTN
EFIAPI
ShellAppMain (
IN UINTN Argc,
IN CHAR16 **Argv
)
{
EFI_STATUS Status;
EFI_SMBIOS_HANDLE SmbiosHandle = 0;
EFI_SMBIOS_TABLE_HEADER *Record;
EFI_SMBIOS_PROTOCOL *Smbios;
UINTN OrigStringNumber = 5;
CHAR8 *AsciiData = "uuuuuuuuiiiiiiii";
Status = gBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, (VOID**)&Smbios);
Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);
Print(L"SmbiosHandle:%x\r\n", SmbiosHandle);
Print(L"Type : %x\r\n",Record->Type);
Print(L"Length: %x\r\n",Record->Length);
Print(L"Handle: %x\r\n",Record->Handle);
DumpHex(2, 0, 256, Record);
Status = Smbios->UpdateString (Smbios, &SmbiosHandle, &OrigStringNumber, AsciiData);
SmbiosHandle = 0;
Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);
Print(L"SmbiosHandle:%x\r\n", SmbiosHandle);
Print(L"Type : %x\r\n",Record->Type);
Print(L"Length: %x\r\n",Record->Length);
Print(L"Handle: %x\r\n",Record->Handle);
DumpHex(2, 0, 256, Record);
return EFI_SUCCESS;
}
SmbiosUpdate.inf
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = SmbiosUpdate
FILE_GUID = dc72d2c7-a48a-42fd-80b6-9d229d9943c8
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = ShellCEntryLib
[Sources]
SmbiosUpdate.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
ShellPkg/ShellPkg.dec
[LibraryClasses]
UefiLib
IoLib
ShellCEntryLib
UefiShellDebug1CommandsLib
[Protocols]
gEfiSmbiosProtocolGuid
[Ppis]
[Guids]
[BuildOptions]
[Pcd]
[PcdEx]
[FixedPcd]
[FeaturePcd]
[PatchPcd]
本文深入探讨了UEFI环境下的EFI_SMBIOS_PROTOCOL,通过示例代码SmbiosUpdate.c和配置文件SmbiosUpdate.inf,阐述如何更新和操作SMBIOS表格,以实现BIOS信息的管理和维护。
4301

被折叠的 条评论
为什么被折叠?



