HII/VFR Element Cheat Sheet for BIOS Setup

VFR/HII cheat sheet: FormSet, Form, Question, OneOf, CheckBox, VarStore, DefaultStore, SuppressIf, GrayOutIf, and setup debugging.

Updated 4 min read
Đọc bằng English Tiếng Việt 日本語
HII Setup cover

When you open a .vfr file, you see many keywords: formset, form, varstore, oneof, checkbox, numeric, suppressif, grayoutif, defaultstore, label, and goto. If you learn them like dictionary entries, they are easy to mix up. A more practical approach is to group them by their role in the BIOS Setup pipeline.

This note is a quick cheat sheet for reading VFR/HII during debugging: which element creates a page, which element creates a control, which element stores a value, which element controls visibility, and which element relates to callback, default, or save behavior.

Quick map

FormSet        top-level group of setup pages
Form           one page inside a FormSet
Question       visible or interactive control
OneOf          dropdown/list that selects one value
CheckBox       boolean/toggle question
Numeric        numeric input or numeric range
String         text input
VarStore       storage mapping for questions
DefaultStore   default group
Default        default value for a question
SuppressIf     hides an item or block
GrayOutIf      shows an item but disables editing
InconsistentIf validates and rejects inconsistent values
Label          anchor for dynamic HiiUpdateForm
Goto           navigation to another form
Action         button/action question
ConfigAccess   backend ExtractConfig/RouteConfig/Callback

When a visible setup option fails, you usually need to walk from VFR source to IFR dump, then to the HII Database, Setup Browser, ConfigAccess, and the real storage behind it.

Page and navigation

formset defines a top-level group of forms. form is a specific page. goto creates navigation to another form. If a menu does not appear, check FormSetGuid, class GUID, FormId, goto target, and Browser policy filters.

Do not rely only on title text. Titles come from the String Package and can be duplicated or localized incorrectly. Debug navigation by GUIDs and IDs.

Controls and values

oneof, checkbox, numeric, string, and orderedlist are all questions. They have QuestionId, prompt/help tokens, VarStore mapping, flags, defaults, and may have callbacks.

A common bug is that UI text is correct but the stored value is wrong. In OneOf, the text shown to the user differs from the numeric value saved by firmware. In CheckBox, boolean width and default can be wrong. In Numeric, range and size must match the real field.

Storage and defaults

varstore connects questions to backend data. A VarStore bug can save to the wrong field, overwrite a neighboring field, or lose the value after reboot.

defaultstore and default define Load Defaults behavior. If defaults are wrong, check DefaultStoreId, question defaults, IFR dump, and migration or platform override code.

Visibility and editability

SuppressIf hides an item or block completely. GrayOutIf keeps it visible but disables editing. Both are UI controls, not security boundaries.

When an option disappears, check SuppressIf. When an option is gray, check GrayOutIf, question flags, policy locks, and Browser refresh. Always confirm the condition scope with an IFR dump because the block may be larger than expected.

Dynamic update and callback

label is often used as an anchor for HiiUpdateForm. action or a question callback can update UI dynamically, validate input, or request reset.

But callback is not Save. Saving usually goes through RouteConfig(). If the callback runs but the value is lost after reboot, check RouteConfig and SetVariable.

Debug by symptom

Page missing        FormSetGuid, class GUID, package publish, SuppressIf
Wrong text or ???   UNI, string token, String Package, language
Gray option         GrayOutIf, flags, policy lock, refresh
Callback missing    QuestionId, flags, ConfigAccess install, action type
Saved value lost    VarStore, RouteConfig, SetVariable, NVRAM, migration
Wrong default       DefaultStoreId, question default, IFR dump, override code
Wrong navigation    FormId, goto target, duplicate title, class policy

What to look for in source

VFR/HII reading checklist

Use this to move from symptom to the right failing layer.

Quick memory aid

Not visible       think FormSet/Form/publish/SuppressIf
Visible but gray  think GrayOutIf/flags/policy
Wrong text        think UNI/String Package/token
Wrong save        think VarStore/RouteConfig/NVRAM
Wrong default     think DefaultStore/default/migration
Wrong callback    think QuestionId/action/ConfigAccess

This cheat sheet does not replace an IFR dump. In many BIOS Setup bugs, the IFR dump is the best evidence of what the Browser actually sees.

Found this article useful?

Share it with someone learning firmware, BIOS/UEFI, or embedded systems, or support the author.

Feedback

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.