C文件
#include
#include
#include
#include
#include
#include
#include
BOOLEAN EFIAPI GuidCmp(IN EFI_GUID Guid1, IN EFI_GUID Guid2);
INTN EFIAPI ShellAppMain (IN UINTN Argc, IN CHAR16 **Argv)
{
EFI_STATUS Status = 0;
EFI_GUID ACPITableGuid = EFI_ACPI_TABLE_GUID;
UINTN SearchCount;
UINTN TableNumber = gST->NumberOfTableEntries;
UINT8 *ACPITable = NULL;
//UINTN OutPutOffset;
for(SearchCount = 0; SearchCount < TableNumber; SearchCount++)
{
// if table guid == ACPI table Guid
if(GuidCmp(gST->ConfigurationTable[SearchCount].VendorGuid, ACPITableGuid) == TRUE) {
//get table address
ACPITable = gST->ConfigurationTable[SearchCount].VendorTable;
break;
}
}
Print(L"%x\n", ACPITable);
return Status;
}
/*
Compare two EFI_GUID
If NOT equal, return FALSE.
If equal, return TRUE.
*/
BOOLEAN EFIAPI GuidCmp(IN EFI_GUID Guid1, IN EFI_GUID Guid2)
{
BOOLEAN EqualFlg = TRUE;
if(Guid1.Data1 != Guid2.Data1||
Guid1.Data2 != Guid2.Data2||
Guid1.Data3 != Guid2.Data3||
Guid1.Data4[0] != Guid2.Data4[0]||
Guid1.Data4[1] != Guid2.Data4[1]||
Guid1.Data4[2] != Guid2.Data4[2]||
Guid1.Data4[3] != Guid2.Data4[3]||
Guid1.Data4[4] != Guid2.Data4[4]||
Guid1.Data4[5] != Guid2.Data4[5]||
Guid1.Data4[6] != Guid2.Data4[6]||
Guid1.Data4[7] != Guid2.Data4[7])
{
EqualFlg = FALSE;
}
return EqualFlg;
}
Inf文件
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = ACPITable
FILE_GUID = E336FA97-CF21-442D-B206-34B7DA0D1366 MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 0.9
ENTRY_POINT = ShellCEntryLib
[Sources]
ACPITable.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
MdeModulePkg/MdeModulePkg.dec
[LibraryClasses]
ShellCEntryLib
UefiLib
BaseLib
IoLib
[Protocols]
[Guids] gEfiVirtualDiskGuid gEfiVirtualCdGuid gEfiVirtualCdGuid gEfiPersistentVirtualDiskGuid gEfiPersistentVirtualDiskGuid gEfiPersistentVirtualCdGuid