Variable Attribute là gì?

Quicknote Variable Attribute là gì?

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
Boot / NVRAM / Device Path Terms cover

Variable Attribute là tập cờ cho biết một UEFI variable được lưu ở đâu và được phép truy cập vào giai đoạn nào. Khi debug BIOS, attribute sai có thể làm variable đọc được trong DXE nhưng mất sau reboot, hoặc đọc được trước ExitBootServices nhưng không đọc được ở runtime.

Mục Giá trị Ghi chú
EFI_VARIABLE_NON_VOLATILE NV Variable được lưu non-volatile, còn sau reboot/power cycle.
EFI_VARIABLE_BOOTSERVICE_ACCESS BS Có thể truy cập trong boot services phase.
EFI_VARIABLE_RUNTIME_ACCESS RT Có thể truy cập sau ExitBootServices từ OS runtime.
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS Auth Ghi cần authenticated payload, thường gặp trong Secure Boot variables.
EFI_VARIABLE_APPEND_WRITE Append Ghi kiểu append thay vì replace toàn bộ data, tuỳ variable hỗ trợ.

Ví dụ đọc attribute

UINT32 Attributes = 0;
UINTN DataSize = 0;

Status = gRT->GetVariable(
  L"BootOrder",
  &gEfiGlobalVariableGuid,
  &Attributes,
  &DataSize,
  NULL
);

if (Status == EFI_BUFFER_TOO_SMALL) {
  // Attributes đã có thể cho biết BootOrder là NV + BS + RT.
}

Với BootOrder, attribute thường là:

EFI_VARIABLE_NON_VOLATILE
EFI_VARIABLE_BOOTSERVICE_ACCESS
EFI_VARIABLE_RUNTIME_ACCESS

Nghĩa là nó được lưu bền, firmware dùng được trong boot phase, và OS/tool runtime cũng có thể đọc/cập nhật theo quyền phù hợp.

Vì sao attribute quan trọng?

01 DXE

Boot Services còn sống

Variable có BS access có thể được driver đọc.

02 BDS

Boot Manager đọc NVRAM

BootOrder/Boot#### phải tồn tại đúng để chọn boot option.

03 EXIT

ExitBootServices

Boot services mất hiệu lực, runtime mapping được thiết lập.

04 OS

Runtime access

Chỉ variable có RT access mới đọc/ghi được qua runtime services.

Cùng là variable, nhưng attribute quyết định nó sống tới đâu trong boot lifecycle.

Lỗi thực tế

Nếu một setup variable đáng ra phải lưu qua reboot nhưng thiếu NON_VOLATILE, bạn có thể thấy UI đổi thành công trong phiên hiện tại nhưng reboot xong lại quay về default. Ngược lại, nếu variable không cần runtime mà lại set RT bừa bãi, surface runtime tăng lên không cần thiết.

Với Secure Boot variables như PK, KEK, db, dbx, vấn đề còn nghiêm hơn: ghi sai attribute/authentication có thể làm update bị từ chối, hoặc trạng thái Secure Boot không đúng như UI hiển thị.

Checklist attribute

Bài liên quan

Nguồn tham khảo public

Thấy nội dung này hữu ích?

Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.