Обработка обновлений
После применения пакетов обновления встроенного ПО и последующей перезагрузки системы загрузчик ОС Windows загружает все файлы полезных данных встроенного ПО (в данном примере firmware.bin) в физическую память. Загрузчик ОС Windows создает заголовки капсул, используя сведения из соответствующей записи ESRT каждого обновления, которая описывает GUID и флаги, используемые при вызове UEFI UpdateCapsule. При установке поля флагов каждого заголовка капсулы загрузчик ОС Windows всегда задает CAPSULE_FLAGS_PERSIST_ACROSS_RESET и CAPSULE_FLAGS_INITIATE_RESET. Загрузчик ОС Windows может дополнительно задать CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE для типов встроенного ПО DEVICE_FIRMWARE, если в INF-файле для пакета драйвера был указан флаг капсулы. Собственные флаги капсул также могут быть указаны в INF-файле, а при указании будут дополнительно включены при вызове UEFI UpdateCapsule.
Если вернуться к примеру ESRT в определении таблицы ESRT и примеру INF пакета обновления ресурсов встроенного ПО в статье Создание пакета драйверов обновления, заголовки капсулы, созданные загрузчиком ОС Windows для передачи в UpdateCapsule, будут следующими.
Поле | Значение | Комментировать |
---|---|---|
CapsuleGuid | {SYSTEM_FIRMWARE} | Из соответствующего элемента ресурса ESRT FirmwareClass. |
HeaderSize | ... | Заполнено для выравнивания страницы firmware.bin start. |
Флаги | 0x50000 | Сохраняйте и инициируйте сброс. |
CapsuleImageSize | ... | Размер заголовка капсулы + размер firmware.bin. |
Обратите внимание, что в этом примере только на одном из двух устройств, определенных в таблице ESRT, установлен новый пакет драйверов для обновления ресурсов встроенного ПО. Если пакет драйверов обновления ресурсов встроенного ПО был создан для второго устройства в таблице 2, а затем установлен на соответствующем устройстве ресурса встроенного ПО, второй заголовок капсулы будет создан следующим образом:
Поле | Значение | Комментировать |
---|---|---|
CapsuleGuid | {DEVICE_FIRMWARE} | Из соответствующего элемента ресурса ESRT FirmwareClass. |
HeaderSize | ... | Заполнено для выравнивания страницы DEVICE. Запуск BIN. |
Флаги | 0x50000 | Сохраняйте и инициируйте, сбрасывайте и заполняйте системную таблицу or'd 0x8010 из соответствующей записи ресурса ESRT в CapsuleFlags. |
CapsuleImageSize | ... | Размер заголовка капсулы + размер устройства. БЕН. |
После того как загрузчик ОС Windows загрузит все ожидающие обновления встроенного ПО и создаст необходимые структуры данных для их описания, он вызывает службу выполнения UpdateCapsule перед вызовом ExitBootServices.
UpdateCapsule вызывается до ExitBootServices, когда встроенное ПО платформы имеет монопольный контроль над всеми устройствами, включая запоминающее устройство. Реализация встроенного ПО платформы UpdateCapsule может сохранять полезные данные обновлений встроенного ПО в постоянном хранилище для поэтапного обновления или для поддержки отката восстановления.
Связанные темы
Создание пакета драйвера обновления
Ввод-вывод устройства из среды UEFI