# 26. EFI\_CONFIGURATION\_TABLE에서 참조되는 테이블

이전에 사용된 UEFI 애플리케이션들은 아래와 같은 Entry point을 계속해서 사용해왔다.

```
EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
```

이전에 살펴보지 않은 `EFI_SYSTEM_TABLE` 구조는 다음과 같은 UEFI 스펙을 따른다.

```
typedef struct {
 EFI_TABLE_HEADER Hdr;
 CHAR16 *FirmwareVendor;
 UINT32 FirmwareRevision;
 EFI_HANDLE ConsoleInHandle;
 EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
 EFI_HANDLE ConsoleOutHandle;
 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
 EFI_HANDLE StandardErrorHandle;
 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr;
 EFI_RUNTIME_SERVICES *RuntimeServices;
 EFI_BOOT_SERVICES *BootServices;
 UINTN NumberOfTableEntries;
 EFI_CONFIGURATION_TABLE *ConfigurationTable;
} EFI_SYSTEM_TABLE;
```

우리는 이미 해당 구조의 대부분의 필드를 사용해왔고, 이제 다른 필드들을 살펴볼 차례이다.

```
UINTN NumberOfTableEntries;
EFI_CONFIGURATION_TABLE *ConfigurationTable
```

UEFI의 스펙에 따르면 아래와 같이 설명이 나와있다.

```
NumberOfTableEntries	The number of system configuration tables in the buffer ConfigurationTable.
ConfigurationTable	A pointer to the system configuration tables. The number of entries in the table is NumberOfTableEntries.
```

`ConfigurationTable`에서 사용되는 `EFI_CONFIGURATION_TABLE` type은 아래와 같은 구조를 나타내고 있다.

이를 통해서 `ShowTables`라는 간단한 애플리케이션을 만들어 OVMF에서 해당 구조가 참조하는 테이블을 살펴보겠다.

```
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  for (UINTN i=0; i<SystemTable->NumberOfTableEntries; i++) {
    Print(L"%g, %p\n", SystemTable->ConfigurationTable[i].VendorGuid,
                       SystemTable->ConfigurationTable[i].VendorTable);
  }
  return EFI_SUCCESS;
}
```

빌드 후 실행을 하면 아래와 같은 결과가 나온다.

```
FS0:\> ShowTables.efi
EE4E5898-3914-4259-9D6E-DC7BD79403CF, 78EDF98
05AD34BA-6F02-4214-952E-4DA0398E2BB9, 7ED2AC0
7739F24C-93D7-11D4-9A3A-0090273FC14D, 78EA018
4C19049F-4137-4DD3-9C10-8B97A83FFDFA, 7ED3AA0
49152E77-1ADA-4764-B7A2-7AFEFED95E8B, 7ED5F10
060CC026-4C0D-4DDA-8F41-595FEF00A502, 7942018
EB9D2D31-2D88-11D3-9A16-0090273FC14D, 7941000
EB9D2D30-2D88-11D3-9A16-0090273FC14D, 7B7E000
8868E871-E4F1-11D3-BC22-0080C73C8881, 7B7E014
DCFA911D-26EB-469F-A220-38B7DC461220, 6E86018
```

해당 GUID들을 edk2 코드베이스에서 찾아보자.

```
EE4E5898-3914-4259-9D6E-DC7BD79403CF, 78EDF98
```

`gLzmaCustomDecompressGuid`\
\`\`LZMA\_CUSTOM\_DECOMPRESS\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/LzmaDecompress.h>\
GUID는 LZMA 사용자 지정 압축/압축 해제 알고리즘을 나타낸다. 콘텐츠가 LZMA를 사용하여 압축된 EFI\_SECTION\_GUID\_DEFINED 유형의 FFS 파일 섹션을 식별하는 데 사용되는 전역 ID이다.

```
05AD34BA-6F02-4214-952E-4DA0398E2BB9, 7ED2AC0
```

`gEfiDxeServicesTableGuid`\
\`\`DXE\_SERVICES\_TABLE\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/DxeServices.h> (DXE Services Table)

```
7739F24C-93D7-11D4-9A3A-0090273FC14D, 78EA018
```

`gEfiHobListGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/HobList.h>\
PEI에서 DXE로 전달된 HOB목록

```
4C19049F-4137-4DD3-9C10-8B97A83FFDFA, 7ED3AA0
```

`gEfiMemoryTypeInformationGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/MemoryTypeInformation.h>\
HOB 메모리 유형 정보

```
49152E77-1ADA-4764-B7A2-7AFEFED95E8B, 7ED5F10
```

`gEfiDebugImageInfoTableGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Debug>

```
060CC026-4C0D-4DDA-8F41-595FEF00A502, 7942018
```

`gMemoryStatusCodeRecordGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/MemoryStatusCodeRecord.h>\
PEI Status 코드에서 발생한 HOB에 대한 Status 코드를 기록한다.

```
EB9D2D31-2D88-11D3-9A16-0090273FC14D, 7941000
```

`gEfiSmbiosTableGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/SmBios.h>

```
EB9D2D30-2D88-11D3-9A16-0090273FC14D, 7B7E000
```

`gEfiAcpi10TableGuid`\
\`\`ACPI\_10\_TABLE\_GUID ACPI\_TABLE\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Acpi.h>\
이전 사양에 대한 ACPI 테이블

```
8868E871-E4F1-11D3-BC22-0080C73C8881, 7B7E014
```

`gEfiAcpiTableGuid/gEfiAcpi20TableGuid`\
\`\`EFI\_ACPI\_20\_TABLE\_GUID EFI\_ACPI\_TABLE\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Acpi.h>\
최신 사양에 대한 ACPI 테이블

```
DCFA911D-26EB-469F-A220-38B7DC461220, 6E77018
```

`gEfiMemoryAttributesTableGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/MemoryAttributesTable.h>\
UEFI 메모리 속성 테이블\[UEFI 규격에 정의]


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bob-mcd-team.gitbook.io/uefi/uefi-development/table/26.efi_configuration_table.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
