- Status = BdsStartBootOption (L"BootNext");\r
- if (Status != EFI_NOT_FOUND) {\r
- // BootNext has not been succeeded launched\r
- if (EFI_ERROR(Status)) {\r
- Print(L"Fail to start BootNext.\n");\r
+ BootNextSize = sizeof(UINT16);\r
+ Status = GetEnvironmentVariable (L"BootNext", NULL, &BootNextSize, (VOID**)&BootNext);\r
+ if (!EFI_ERROR(Status)) {\r
+ ASSERT(BootNextSize == sizeof(UINT16));\r
+\r
+ // Generate the requested Boot Entry variable name\r
+ UnicodeSPrint (BootVariableName, 9 * sizeof(CHAR16), L"Boot%04X", *BootNext);\r
+\r
+ // Set BootCurrent variable\r
+ gRT->SetVariable (L"BootCurrent", &gEfiGlobalVariableGuid,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+ BootNextSize, BootNext);\r
+\r
+ FreePool (BootNext);\r
+\r
+ // Start the requested Boot Entry\r
+ Status = BdsStartBootOption (BootVariableName);\r
+ if (Status != EFI_NOT_FOUND) {\r
+ // BootNext has not been succeeded launched\r
+ if (EFI_ERROR(Status)) {\r
+ Print(L"Fail to start BootNext.\n");\r
+ }\r
+\r
+ // Delete the BootNext environment variable\r
+ gRT->SetVariable (L"BootNext", &gEfiGlobalVariableGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+ 0, NULL);\r