GUID и device path UEFI
Узнайте, какой протокол, модуль или пространство переменных соответствует GUID прошивки UEFI, или декодируйте device path, чтобы по узлам увидеть, какие диск, раздел, файл или сетевую карту использует загрузочная запись. Поддерживаются текстовая форма из UEFI Shell и efibootmgr -v, а также двоичные данные переменных Boot####.
Вставьте один или несколько GUID, имена переменных из efivarfs или структуры EDK2 либо введите часть имени, например GlobalVariable
Примеры:

Как это работает

Прошивка UEFI с помощью GUID идентифицирует почти все, с чем работает: протоколы, которые предоставляют драйверы, модули DXE, PEI и SMM, тома прошивки и пространства имен переменных, например глобальных переменных загрузки или баз подписей Secure Boot. Сам по себе GUID ни о чем не говорит; этот инструмент ищет его символическое имя в каталоге из тысяч GUID из EDK2 и от ведущих производителей прошивок.

Device path — это путь, по которому прошивка добирается до устройства или файла: от корня шины PCI до контроллера, диска, раздела и загрузчика .efi. Загрузочные записи Boot#### хранят device path в двоичном виде; инструмент переводит его в текстовую форму и объясняет каждый узел и его поля.

Примеры

8BE4DF61-93CA-11D2-AA0D-00E098032B8CEfiGlobalVariableGuidПространство имен глобальных переменных спецификации, таких как BootOrder, Boot#### или SecureBoot.
db-d719b2cb-3d3a-4596-a3bc-dad00e67656fEfiImageSecurityDatabaseGuidИмя файла из /sys/firmware/efi/efivars: переменная db механизма Secure Boot. Инструмент извлекает GUID из имени.
Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)Fv → FvFile 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 = FullShellЗагрузочная запись UEFI Shell, встроенной в прошивку: файл ищется по GUID внутри тома прошивки.
01 00 00 00 20 00 55 00 45 00 46 00 49 00 20 00 4F 00 53 00 00 00 02 01 0C 00 D0 41 03 0A 00 00 00 00 01 01 06 00 02 1F 03 12 0A 00 00 00 FF FF 00 00 7F FF 04 00UEFI OS — PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)Двоичное содержимое переменной Boot####: атрибуты, описание и device path. Если вставить файл из efivarfs, четыре байта атрибутов переменной в его начале распознаются автоматически.

Сценарии использования

  • Поймите, что загружает каждая запись из списка efibootmgr -v, прежде чем менять порядок загрузки или удалять запись.
  • Определите GUID, которые встречаются в журнале загрузки, дампе переменных или коде EDK2.
  • Узнайте, какой переменной соответствует каждый файл в /sys/firmware/efi/efivars, например базы подписей Secure Boot.
  • Выясните, какие диск, раздел и файл использует загрузочная запись, которая перестала работать после клонирования или замены диска.
  • Изучите модули образа прошивки, открытого в UEFITool или других инструментах анализа.

Часто задаваемые вопросы

Где взять device path загрузочной записи?

В Linux команда efibootmgr -v показывает каждую запись с ее device path в текстовом виде, а файлы Boot#### в /sys/firmware/efi/efivars содержат полные двоичные данные, которые можно вывести с помощью xxd или hexdump -C. В UEFI Shell команда bcfg boot dump -v показывает записи, а map -v — device path дисков.

Почему GUID нет в каталоге?

Любой производитель может создавать GUID для собственных модулей, нигде их не регистрируя. Каталог объединяет GUID из EDK2 и те, что сообщество выявило в прошивках ведущих производителей, но всегда останутся собственные GUID без имени. GUID разделов в узлах HD уникальны для каждого диска и в каталоге никогда не встречаются.

Какие форматы device path поддерживаются?

Текстовая форма из спецификации в том виде, в каком ее показывают UEFI Shell и EDK2, полная строка efibootmgr -v и двоичные данные в шестнадцатеричном виде, с пробелами или без, в том числе в виде вывода xxd или hexdump -C. Двоичные данные могут быть только device path, содержимым переменной Boot#### или файлом из efivarfs с атрибутами в начале.

Отправляется ли device path на сервер?

Нет. Device path декодируется в вашем браузере. С сервера запрашиваются только имена GUID прошивки, встречающихся в узлах; GUID разделов и остальные данные не покидают ваш компьютер.

Что означают данные, которые efibootmgr показывает после пути к файлу?

Это необязательные данные записи, которые прошивка передает загрузчику. Например, диспетчер загрузки Windows хранит там ссылку на свое хранилище BCD. Они не являются частью device path; если вставить двоичные данные переменной, инструмент покажет их отдельно.