Understanding UEFI Variable Names and Vendor GUIDs
UEFI variables provide a persistent mechanism for firmware, bootloaders, and operating systems to store configuration parameters and system state across reboots. This article examines the exact structure of a UEFI variable name, detailing how human-readable strings pair with vendor Globally Unique Identifiers (GUIDs) to establish unique namespaces and prevent variable collisions across different hardware and software implementations.
The Structure of a UEFI Variable Name
In the Unified Extensible Firmware Interface (UEFI) specification, a variable is not identified by a simple text string alone. Instead, a UEFI variable's identity is defined by a two-part composite key:
- A Unicode Name String: A null-terminated string
composed of 16-bit characters (UCS-2 or UTF-16). This string serves as
the human-readable identifier for the variable, such as
BootOrder,BootCurrent, orSecureBoot. Variable names are case-sensitive within the firmware environment. - A Vendor GUID: A 128-bit identifier that namespaces the variable name.
Because identity relies on both the string and the GUID
simultaneously, two variables can share the exact same string (such as
Timeout) and coexist in NVRAM without conflict, provided
they are associated with different Vendor GUIDs.
In addition to its name and GUID, every UEFI variable possesses an
attribute bitmask (such as EFI_VARIABLE_NON_VOLATILE,
EFI_VARIABLE_BOOTSERVICE_ACCESS, and
EFI_VARIABLE_RUNTIME_ACCESS). These attributes determine
persistence and access levels during the boot sequence and runtime, but
the unique key used to query or write a variable via runtime services
like GetVariable() and SetVariable() is
strictly the combination of VariableName and
VendorGuid.
What is a Vendor GUID?
A Vendor GUID is a standard 128-bit Globally Unique Identifier
(equivalent to a UUID) formatted in the standard 8-4-4-4-12 hexadecimal
representation (for example,
8BE4DF61-93CA-11D2-AA0D-00E098032B8C).
The primary purpose of the Vendor GUID is namespacing. The UEFI ecosystem involves numerous independent entities, including the UEFI Forum, motherboard manufacturers, silicon vendors, independent BIOS vendors (IBVs), and operating system developers. The Vendor GUID ensures that each entity can create, update, and manage firmware variables without risking collisions with variables created by other parties.
Common Vendor GUID Implementations
- The UEFI Global Variable GUID: Standard variables
defined by the UEFI specification use the global namespace GUID
EFI_GLOBAL_VARIABLE(8BE4DF61-93CA-11D2-AA0D-00E098032B8C). This namespace contains architectural variables critical for booting, such asBootOrder,BootNext,PlatformLang, andConOut. - Hardware and OEM GUIDs: Manufacturers like Dell, HP, Lenovo, and Intel assign proprietary GUIDs to store platform-specific hardware configurations, thermal policies, or custom BIOS setup options.
- Operating System GUIDs: Operating systems allocate
their own GUIDs to manage OS-specific boot parameters and telemetry. For
instance, Microsoft uses dedicated GUIDs to manage Windows Boot Manager
configurations, BitLocker authentication states, and Secure Boot
certificate databases (
db,dbx,KEK, andPK).