В системе EFI, которая загружает GRUB2, я хочу создать переменную EFI для чтения. Это возможно?Как создать переменную чтения только для UEFI?
Спасибо, Mat
В системе EFI, которая загружает GRUB2, я хочу создать переменную EFI для чтения. Это возможно?Как создать переменную чтения только для UEFI?
Спасибо, Mat
По UEFI Specification 2.5 нет прямого способа создания только для чтения переменной UEFI.
В ожидании результата можно достичь с помощью переменных с атрибутами : EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS и EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS.
В соответствии с главой 7.2 (SetVariable описание части) UEFI Spec 2.5:
(...) попытка удалить переменную созданную с EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS или EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS атрибута, для которого предписанной AuthInfo валидация не удалась или когда вызывается с использованием DataSize нуля, произойдет сбой с статусом EFI_SECURITY_VIOLATION.
Согласно главе 7.2.1 (Использование дескриптора EFI_VARIABLE_AUTHENTICATION_2), после длительной процедуры, описывающей переменную процесса обновления:
Водитель должен обновить значение переменной, только если все эти проверки проходят. Если какая-либо из проверок не удалась, прошивка должна вернуть EFI_SECURITY_VIOLATION.
В заключение невозможно удалить или изменить переменную, созданную с использованием атрибутов * _WRITE_ACCESS, без аутентификации. GetVariable
вернет правильное значение, указывающее атрибуты, возвращаемые переменными, требуют проверки подлинности перед обновлением или удалением. Для получения дополнительной информации, пожалуйста, прочтите UEFI Spec 2.5 главы 7.2.1 и 7.2.2.
В соответствии с Uefi Specification 2.7 существует прямой способ создания постоянной переменной UEFI переменной Post ExitBootServices(), не предоставляя атрибут EFI_VARIABLE_NON_VOLATILE.
главу '+8,2 разнообразные услуги' SetVariable() Описание:
После ExitBootServices() выполняется, только переменные, которые имеют EFI_VARIABLE_RUNTIME_ACCESS и EFI_VARIABLE_NON_VOLATILE набор может быть набор с SetVariable(). Переменные, имеющие доступ во время выполнения, но не энергонезависимые, являются переменными данных только для чтения, как только выполняется ExitBootServices().
Смотрите также главу «8.2 разнообразные услуги» GetVariable() Связанные определения:
//*******************************************************
// Variable Attributes
//*******************************************************
#define EFI_VARIABLE_NON_VOLATILE 0x00000001
Это два отдельных вопроса, пожалуйста, урезать спросить только одну вещь сразу (и после другого в отдельности) , – unixsmurf