2015-10-13 4 views
3

В системе EFI, которая загружает GRUB2, я хочу создать переменную EFI для чтения. Это возможно?Как создать переменную чтения только для UEFI?

Спасибо, Mat

+0

Это два отдельных вопроса, пожалуйста, урезать спросить только одну вещь сразу (и после другого в отдельности) , – unixsmurf

ответ

2

По 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.

0

В соответствии с 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 
Смежные вопросы