| Address | Name | Description |
|---|---|---|
| StrLen | ||
| AsciiStrLen | ||
| StrnLenS | ||
| AsciiStrnLenS | ||
| UnicodeVSPrint | ||
| UnicodeSPrint | ||
| SPrint | ||
| GetHiiDatabase | ||
| DebugAssert | ||
| DebugLog | ||
| GetDebugLevel | ||
| FreePool | ||
| ReadUnaligned16 | ||
| ReadUnaligned64 | ||
| ConfigNodeFree | ||
| HexParse4 | ||
| JsonObjectAdd | ||
| GetHiiPackageListSize | ||
| RegisterVarStoreNodeMapping | ||
| RegisterVarStoreNode | ||
| CompareVarStoreGuid | ||
| CleanupVarStore | ||
| ProcessIfrOpcode | ||
| ParseIfrGuidOp | ||
| ParseIfrOpcodes | ||
| ProcessVarStore | ||
| InitSetupStoreList | ||
| FindVarStoreProtocol | ||
| WriteBackSetupStore | ||
| InitAttributesNode | ||
| UefiConfigManagerEntry | ||
| ModuleEntryPoint | ||
| Direct | memset call (compiler intrinsic or inline assembly) | |
| Copy | aligned 8-byte chunks from end | |
| Copy | remainder bytes | |
| No | overlap: copy forward, 8 bytes at a time | |
| Use | qmemcpy for aligned chunks | |
| Copy | remaining bytes | |
| toupper | } | |
| Assertion | checks on buffer, format, sizes | |
| Output | literal character | |
| Handle | format specifier | |
| skip | '%' | |
| Check | for flags (only '-' is minimally supported) | |
| Width | if (FormatChar == L'') { | |
| Precision | if (*FormatChar == L'.') { | |
| Length | modifiers | |
| Conversion | specifier | |
| Convert | to decimal | |
| Output | digits | |
| Lookup | status string or output hex code | |
| GUID | printing - simplified representation | |
| Calls | UnicodeVSPrint with BufferSize/2 (CHAR16 half) | |
| Check | if we're at TPL level that allows protocol lookup | |
| Locate | the HII Database protocol (GUID at unk_6C00) | |
| Actually | the debug protocol GUID | |
| Call | the debug protocol's assertion handler (at offset +8) | |
| Check | if this error level is enabled | |
| Call | the protocol's debug print function at offset +0 | |
| Read | CMOS | |
| Read | physical memory at 0xFDAF0490 | |
| EFI_D_ERROR | only | |
| EFI_D_ERROR | ** | EFI_D_INIT** |
| The | caller expects the variable to be set even if NULL | |
| Call | SetMem to zero it | |
| If | this is not a reference (flag 0x100 not set), free children | |
| If | flag 0x200 not set, free StringValue | |
| Check | for "null" | |
| Check | for "false" | |
| Check | for "true" | |
| Quoted | string | |
| Number | (negative sign or digit) | |
| Array | if (*Input == '[') { | |
| Object | if (*Input == '{') { | |
| indicates | integer initially | |
| Handle | negative sign | |
| Check | for leading zero (octal/hex prefix ignored per JSON spec, but parsed anyway) | |
| Parse | integer part | |
| Parse | fractional part | |
| float | EndPtr++; | |
| Parse | exponent | |
| toupper | check 'e' or 'E' | |
| Store | parsed values in the node | |
| Store | the type flags (int vs float) in the pad field | |
| Calculate | the length of the string (after escape processing) | |
| Count | actual characters (escape sequences count as 1) | |
| Allocate | buffer for the decoded string | |
| Handle | escape sequences | |
| Unicode | escape \uXXXX | |
| Handle | surrogate pairs | |
| High | surrogate, expect \uXXXX low surrogate | |
| Store | the decoded string in the node | |
| Return | pointer after closing quote | |
| Skip | whitespace | |
| Empty | array | |
| Parse | first element | |
| Parse | remaining elements | |
| Parse | next element | |
| Empty | object | |
| Parse | first member | |
| Parse | key string | |
| Move | string value to name, mark as key | |
| The | original decompiled code swaps Name and StringValue pointers | |
| Parse | value | |
| Parse | remaining members | |
| Parse | key | |
| Continue | searching | |
| Free | any existing key name on the value | |
| Set | the key name | |
| Link | into parent's child list | |
| Find | the last sibling | |
| First | attempt with 512-byte buffer | |
| Free | and retry with correct size | |
| First | call: get required buffer size | |
| Allocate | and re-export | |
| Export | with full buffer | |
| Convert | bytes to UINT16 units | |
| Returns | buffer pointer as status | |
| Append | to linked list | |
| Skip | leading spaces | |
| Shift | the string left | |
| Trim | trailing spaces | |
| Return | NULL if all spaces were stripped | |
| Gets | count | |
| Append | at end of linked list at gIfrNvStoreMapHandle + 26 | |
| EFI_IFR_VARSTORE | VarId = OpcodeData[9]; // VarStoreId | |
| Actual | variable name follows | |
| Size | VarGuid = OpcodeData + 11; // GUID | |
| EFI_IFR_VARSTORE_NAME_VALUE | VarId = OpcodeData[1]; // VarStoreId | |
| EFI_IFR_VARSTORE_EFI | VarStoreName = (CHAR8 *)(OpcodeData + 2); | |
| Find | or create the varstore mapping in the linked list | |
| Check | for matching config section name | |
| Read | variable from RuntimeServices | |
| In | the original: RuntimeServices->GetVariable(varName, &guid, &attribs, &size, buffer) | |
| Then | check for section name matching "Setup" etc. | |
| Allocate | and store the variable data | |
| Copy | data into entry | |
| Store | the config name reference | |
| Entry | + 17 stores the config name pointer for the section | |
| Log | if debug enabled | |
| Register | the mapping | |
| GUIDed | opcode processing | |
| processes | the variable ID and data, registers mappings | |
| IFR | opcode length at offset +2 | |
| Process | based on opcode type | |
| EFI_IFR_FORM | case 0x02: // EFI_IFR_SUBTITLE | |
| EFI_IFR_TEXT | case 0x05: // EFI_IFR_ONE_OF | |
| EFI_IFR_CHECKBOX | case 0x07: // EFI_IFR_NUMERIC | |
| EFI_IFR_STRING | case 0x09: // EFI_IFR_PASSWORD | |
| EFI_IFR_ORDERED_LIST | // Questions with varstore - parse variable info | |
| Walk | the linked list tracking varstore IDs | |
| EFI_IFR_VARSTORE | case 0x25: // EFI_IFR_VARSTORE_NAME_VALUE | |
| EFI_IFR_VARSTORE_EFI | ProcessIfrOpcode(ConfigAddr, (UINT16 *)Current, IfrEnd, DummyParam); | |
| EFI_IFR_GUID | ParseIfrGuidOp(ConfigAddr, (UINT16 *)Current, DummyParam); | |
| EFI_IFR_DUP | case 0x2D: // EFI_IFR_DEFAULTSTORE | |
| Query | package list size | |
| Allocate | buffer | |
| Export | the package list | |
| Parse | IFR opcodes from the package list | |
| Skip | package list header | |
| Total | package list length | |
| 0xDF | = end marker | |
| IFR | package type 2 | |
| Process | any pending varstore mapping items from the queue | |
| Dequeue | and process | |
| Get | list of HII handles (RegisteredHandles) | |
| Allocate | temporary array for varstore entries (each 53 bytes) | |
| Using | raw 8-byte pointer arithmetic as in original | |
| Initialize | varstore array | |
| Process | each handle | |
| Continue | on error | |
| Write | back phase | |
| Optimized | byte comparison that tries 8-byte aligned reads | |
| Handle | misalignment | |
| Compare | aligned 8-byte chunks | |
| Get | all handles supporting the form map protocol | |
| Call | GetData(Handle, 0x19, 0, ConfigData, ConfigSize, ...) | |
| Retry | phase: try ResetData | |
| Walk | handles again, call ResetData | |
| Restore | to fixed TPL | |
| Find | the actual variable store protocol | |
| Read | variable data | |
| Call | ReadFunction | |
| Cleanup | BootServices->FreePool(*ConfigData); | |
| Restore | TPL again | |
| Entry | is valid | |
| Enable | system access variable | |
| Format | variable name | |
| Write | the variable | |
| GUID | at offset +25 | |
| Attributes | at offset +49 | |
| DataSize | at offset +41 | |
| Data | at offset +9 | |
| Mark | as written | |
| Delete | the backup variable | |
| Trigger | system reset via I/O port 0xCF9 | |
| System | reset | |
| Locate | HII Database Protocol | |
| Locate | HII String Protocol | |
| Get | number of HII handles | |
| Allocate | handle buffer | |
| Initialize | setup store list | |
| Write | back and cleanup | |
| Create | root "BIOS Setup Information Store" node | |
| Object | type | |
| Create | "Modified" timestamp string | |
| Get | current date/time from RuntimeServices | |
| Format | timestamp | |
| Store | as ASCII via AsciiToUnicode/UnicodeToAscii | |
| Create | Attributes node | |
| Initialize | protocols and varstore | |
| Configuration | is built; clean up | |
| Initialize | HOB list | |
| Call | the actual entry point |
Generated by HR650X BIOS Decompilation Project