- UINT16 FileOptionMask;\r
- SECUREBOOT_MENU_ENTRY *NewMenuEntry;\r
- SECUREBOOT_FILE_CONTEXT *NewFileContext;\r
- EFI_FORM_ID FormId;\r
- BOOLEAN ExitFileExplorer;\r
- EFI_STATUS Status;\r
- EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath;\r
-\r
- NewMenuEntry = NULL;\r
- NewFileContext = NULL;\r
- ExitFileExplorer = FALSE;\r
- FileOptionMask = (UINT16) (FILE_OPTION_MASK & KeyValue);\r
-\r
- if (PrivateData->FeDisplayContext == FileExplorerDisplayUnknown) {\r
- //\r
- // First in, display file system.\r
- //\r
- FreeMenu (&FsOptionMenu);\r
- FindFileSystem ();\r
- \r
- CreateMenuStringToken (PrivateData->HiiHandle, &FsOptionMenu);\r
- UpdateFileExplorePage (PrivateData->HiiHandle, &FsOptionMenu, PrivateData->FeCurrentState);\r
-\r
- PrivateData->FeDisplayContext = FileExplorerDisplayFileSystem;\r
- } else {\r
- if (PrivateData->FeDisplayContext == FileExplorerDisplayFileSystem) {\r
- NewMenuEntry = GetMenuEntry (&FsOptionMenu, FileOptionMask);\r
- } else if (PrivateData->FeDisplayContext == FileExplorerDisplayDirectory) {\r
- NewMenuEntry = GetMenuEntry (&DirectoryMenu, FileOptionMask);\r
- }\r
-\r
- NewFileContext = (SECUREBOOT_FILE_CONTEXT *) NewMenuEntry->FileContext;\r
-\r
- if (NewFileContext->IsDir ) {\r
- PrivateData->FeDisplayContext = FileExplorerDisplayDirectory;\r
-\r
- RemoveEntryList (&NewMenuEntry->Link);\r
- FreeMenu (&DirectoryMenu);\r
- Status = FindFiles (NewMenuEntry);\r
- if (EFI_ERROR (Status)) {\r
- ExitFileExplorer = TRUE;\r
- goto OnExit;\r
- }\r
- CreateMenuStringToken (PrivateData->HiiHandle, &DirectoryMenu);\r
- DestroyMenuEntry (NewMenuEntry);\r
-\r
- UpdateFileExplorePage (PrivateData->HiiHandle, &DirectoryMenu, PrivateData->FeCurrentState);\r
-\r
- } else {\r
- if (PrivateData->FeCurrentState == FileExplorerStateEnrollPkFile) {\r
- FormId = SECUREBOOT_ADD_PK_FILE_FORM_ID;\r
- } else if (PrivateData->FeCurrentState == FileExplorerStateEnrollKekFile) {\r
- FormId = FORMID_ENROLL_KEK_FORM;\r
- } else if (PrivateData->FeCurrentState == FileExplorerStateEnrollSignatureFileToDb) {\r
- FormId = SECUREBOOT_ENROLL_SIGNATURE_TO_DB;\r
- } else if (PrivateData->FeCurrentState == FileExplorerStateEnrollSignatureFileToDbx) {\r
- FormId = SECUREBOOT_ENROLL_SIGNATURE_TO_DBX;\r
- } else {\r
- return FALSE;\r
- }\r
-\r
- PrivateData->MenuEntry = NewMenuEntry;\r
- PrivateData->FileContext->FileName = NewFileContext->FileName;\r
- \r
- TmpDevicePath = NewFileContext->DevicePath;\r
- OpenFileByDevicePath (\r
- &TmpDevicePath,\r
- &PrivateData->FileContext->FHandle,\r
- EFI_FILE_MODE_READ,\r
- 0\r
- );\r
-\r
- //\r
- // Create Subtitle op-code for the display string of the option.\r
- //\r
- RefreshUpdateData ();\r
- mStartLabel->Number = FormId;\r
-\r
- HiiCreateSubTitleOpCode (\r
- mStartOpCodeHandle,\r
- NewMenuEntry->DisplayStringToken,\r
- 0,\r
- 0,\r
- 0\r
- );\r
-\r
- HiiUpdateForm (\r
- PrivateData->HiiHandle,\r
- &gSecureBootConfigFormSetGuid,\r
- FormId,\r
- mStartOpCodeHandle, // Label FormId\r
- mEndOpCodeHandle // LABEL_END\r
- );\r
- }\r
- }\r
-\r
-OnExit:\r
- return ExitFileExplorer;\r