diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c index d7927725b2..7c36a6f2b7 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c @@ -20,6 +20,38 @@ UINT16 mCurFakeQestId; FORM_DISPLAY_ENGINE_FORM gDisplayFormData; BOOLEAN mFinishRetrieveCall = FALSE; +/** + Check whether the ConfigAccess protocol is available + + @parm FormSet FormSet of which the ConfigAcces protocol need to be checked. + + @retval EFI_SUCCESS The function executed successfully. + +**/ +EFI_STATUS +CheckConfigAccess( + IN FORM_BROWSER_FORMSET *FormSet + ) +{ + EFI_STATUS Status; + + Status = gBS->HandleProtocol ( + FormSet->DriverHandle, + &gEfiHiiConfigAccessProtocolGuid, + (VOID **) &FormSet->ConfigAccess + ); + if (EFI_ERROR (Status)) { + // + // Configuration Driver don't attach ConfigAccess protocol to its HII package + // list, then there will be no configuration action required. + // Or the ConfigAccess protocol has been uninstalled. + // + FormSet->ConfigAccess = NULL; + } + + return EFI_SUCCESS; +} + /** Evaluate all expressions in a Form. @@ -1686,6 +1718,8 @@ DisplayForm ( return Status; } + CheckConfigAccess(gCurrentSelection->FormSet); + Status = ProcessUserInput (&UserInput); FreeDisplayFormData(); return Status;