UEFI Component Name Protocol Explained

The Unified Extensible Firmware Interface (UEFI) Component Name protocol provides a standardized mechanism for UEFI drivers to expose human-readable names for themselves and the hardware controllers they manage. This article explains the primary functions of the protocol, how it manages driver and controller identification, its support for international localization, and its practical importance within the UEFI pre-boot environment.

In the UEFI architecture, drivers, devices, and buses are identified internally using programmatic handles, binary protocols, and Globally Unique Identifiers (GUIDs). While optimal for firmware execution, these numerical identifiers are indecipherable to end users and system administrators. The EFI_COMPONENT_NAME2_PROTOCOL (along with its predecessor, EFI_COMPONENT_NAME_PROTOCOL) bridges this gap by allowing a driver to attach localized, plain-text descriptions directly to its handles.

The protocol provides two primary member functions to retrieve descriptive strings:

  • GetDriverName: Returns a human-readable name for the driver itself, such as "Intel Gigabit Ethernet Network Driver" or "AHCI SATA Controller Driver." This describes the software component executing in the firmware.
  • GetControllerName: Returns a plain-text name for a specific device or child controller managed by the driver, such as "PCI Gigabit Network Connection" or "Port 0: Samsung SSD 980." This allows individual peripheral instances to be clearly distinguished.

A critical feature of the Component Name protocol is native support for localization. The protocol defines a SupportedLanguages attribute, which lists the language codes the driver can provide. When querying GetDriverName or GetControllerName, the caller specifies the desired language tag based on RFC 4646 standards (such as en-US, fr-FR, or zh-Hans). If the requested language is supported, the protocol returns the localized string; otherwise, it returns an unsupported error, allowing the caller to fall back to a default language.

The modern EFI_COMPONENT_NAME2_PROTOCOL replaced the original EFI_COMPONENT_NAME_PROTOCOL to modernize language handling. The original protocol utilized three-character ISO 639-2 language codes (such as eng), whereas EFI_COMPONENT_NAME2_PROTOCOL aligns with newer UEFI specifications by using flexible RFC 4646 language tags.

In practice, the Component Name protocol is heavily utilized across the pre-boot ecosystem. Firmware setup utilities (the BIOS configuration screen) query this protocol to display meaningful device names in boot order menus and hardware health monitors. Additionally, the UEFI Shell relies on it to populate the output of diagnostic commands like drivers, devices, and dh (dump handle), transforming raw hexadecimal addresses into readable diagnostics that make debugging and system administration feasible.