HII 介绍
HII, 全称Human Interface Infrastructure, 定义了一套管理用户输入的基础架构,支持多种类型的用户
输入。在这个架构中HII 数据库处理底层位置,负责提供用户安装、卸载及使用各种字符串、字体
及图片等资源的接口。
HII 数据库主要包括以下功能模块:
1 HII 数据库协议 -- 以包装表(Package List ) 为单位管理HII 相关的数据结构。
2 HII 字体协议-- 从HII 数据库获取字体信息的协议
3 HII 映像协议 操作HII 数据库中映像文件的协议
4 HII 字符串协议 管理 HII 数据库中字符串的协议
5 HII 配置路由协议 -- 负责在驱动程序和配置应用程序之间传送配置数据和配置结果的协议。
typedef struct _HII_DATABASE_PRIVATE_DATA {
UINTN Signature;
LIST_ENTRY DatabaseList;
LIST_ENTRY DatabaseNotifyList;
EFI_HII_FONT_PROTOCOL HiiFont;
EFI_HII_IMAGE_PROTOCOL HiiImage;
EFI_HII_IMAGE_EX_PROTOCOL HiiImageEx;
EFI_HII_STRING_PROTOCOL HiiString;
EFI_HII_DATABASE_PROTOCOL HiiDatabase;
EFI_HII_CONFIG_ROUTING_PROTOCOL ConfigRouting;
EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL ConfigKeywordHandler;
LIST_ENTRY HiiHandleList;
INTN HiiHandleCount;
LIST_ENTRY FontInfoList; // global font info list
UINTN Attribute; // default system color
EFI_GUID CurrentLayoutGuid;
EFI_HII_KEYBOARD_LAYOUT *CurrentLayout;
} HII_DATABASE_PRIVATE_DATA;
Signature -- 该数据结构的签名, 值 为HII_DATABASE_PRIVATE_SIGNATURE
DatabaseList -- 数据库链表, 链表上的每个节点指向一数据库项。
DatabaseNotifyList -- 通知链表,链表上的每个节点指向一个通知函数
HiiFont HiiDatabase 驱动程序中EFI_HII_FONT_PROTOCOL 的实例实现 。
HiiImage - HiiDatabase 驱动程序中EFI_HII_IMAGE_PROTOCOL 的实例实现。
HiiString -- HiiDatabase 驱动程序中EFI_HII_STRING_PROTOCOL 的实例实现。
HiiDatabase -- HiiDatabase 驱动程序中EFI_HII_DATABASE_PROTOCOL 的实例实现。
ConfigRouting HiiDatabase 驱动程序中EFI_HII_CONFIG_ROUTING_PROTOCOL 的实例实现。
AddPackages() 函数
AddPackages()函数负责完成两件任务,之一是将PackageList 指向的包列表头部及各种名安装到
HII 数据库中,之二是调用之前已经存入系统的通知函数,告知安装通知函数的程序目前HII 数据库
有更新。UEFI 规范定义了四种通知类型。在这个函数中,输入参数NotifyType 支持
EFI_HII_DATABASE_NOTIFY_NEW_PACK 和EFI_HII_DATABASE_NOTIFY_ADD_PACK 两种。
///
/// EFI_HII_DATABASE_NOTIFY_TYPE.
///
typedef UINTN EFI_HII_DATABASE_NOTIFY_TYPE;
#define EFI_HII_DATABASE_NOTIFY_NEW_PACK 0x00000001
#define EFI_HII_DATABASE_NOTIFY_REMOVE_PACK 0x00000002
#define EFI_HII_DATABASE_NOTIFY_EXPORT_PACK 0x00000004
#define EFI_HII_DATABASE_NOTIFY_ADD_PACK 0x00000008
/**