HII/VFR Element Cheat Sheet for BIOS Setup
VFR/HII cheat sheet: FormSet, Form, Question, OneOf, CheckBox, VarStore, DefaultStore, SuppressIf, GrayOutIf, and setup debugging.
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.
Related notes
- What is VFR?
- What is IFR?
- What is a Question in VFR?
- What is VarStore?
- What is ConfigAccess Protocol?
Found this article useful?
Share it with someone learning firmware, BIOS/UEFI, or embedded systems, or support the author.
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.
HII Architecture Overview in UEFI
A practical map of HII: drivers, package lists, HII Database, Setup Browser, ConfigAccess, and variable storage.
What is BIOS Setup: from the classic blue screen to HII and modern NVRAM
Modern BIOS Setup is built on HII: VFR, VarStore, NVRAM. Why adding a field in the middle of a struct can break a system, and how to debug settings that don't persist.
HII Save, Callback, and Reset Flow in BIOS Setup
UEFI HII save flow: browser state, callback actions, RouteConfig, SetVariable, ActionRequest, reset handling, and save debugging.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.