2 UEFI variable support functions for Firmware Management Protocol based
5 Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>
6 Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
13 #include "VariableSupport.h"
16 Retrieve the value of a 32-bit UEFI Variable specified by VariableName and
17 a GUID of gEfiCallerIdGuid.
19 @param[in] VariableName Pointer to the UEFI Variable name to retrieve.
20 @param[out] Valid Set to TRUE if UEFI Variable is present and the size
21 of the UEFI Variable value is 32-bits. Otherwise
23 @param[out] Value If Valid is set to TRUE, then the 32-bit value of
24 the UEFI Variable. Otherwise 0.
29 IN CHAR16
*VariableName
,
42 Status
= GetVariable2 (
48 if (!EFI_ERROR (Status
) && (Size
== sizeof (*Value
)) && (Buffer
!= NULL
)) {
59 Delete the UEFI Variable with name specified by VariableName and GUID of
60 gEfiCallerIdGuid. If the variable can not be deleted, then print a
63 @param[in] VariableName Pointer to the UEFI Variable name to delete.
68 IN CHAR16
*VariableName
75 GetFmpVariable (VariableName
, &Valid
, &Value
);
77 Status
= gRT
->SetVariable (VariableName
, &gEfiCallerIdGuid
, 0, 0, NULL
);
78 if (EFI_ERROR (Status
)) {
79 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to delete variable %s. Status = %r\n", mImageIdName
, VariableName
, Status
));
81 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Deleted variable %s\n", mImageIdName
, VariableName
));
87 Retrieve the FMP Controller State UEFI Variable value. Return NULL if
88 the variable does not exist or if the size of the UEFI Variable is not the
89 size of FMP_CONTROLLER_STATE. The buffer for the UEFI Variable value
90 if allocated using the UEFI Boot Service AllocatePool().
92 @param[in] Private Private context structure for the managed controller.
94 @return Pointer to the allocated FMP Controller State. Returns NULL
95 if the variable does not exist or is a different size than expected.
98 FMP_CONTROLLER_STATE
*
99 GetFmpControllerState (
100 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
104 FMP_CONTROLLER_STATE
*FmpControllerState
;
107 FmpControllerState
= NULL
;
109 Status
= GetVariable2 (
110 Private
->FmpStateVariableName
,
112 (VOID
**)&FmpControllerState
,
115 if (EFI_ERROR (Status
) || (FmpControllerState
== NULL
)) {
116 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to get the controller state. Status = %r\n", mImageIdName
, Status
));
118 if (Size
== sizeof (*FmpControllerState
)) {
119 return FmpControllerState
;
122 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Getting controller state returned a size different than expected. Size = 0x%x\n", mImageIdName
, Size
));
125 if (FmpControllerState
!= NULL
) {
126 FreePool (FmpControllerState
);
133 Generates a Null-terminated Unicode string UEFI Variable name from a base name
134 and a hardware instance. If the hardware instance value is 0, then the base
135 name is returned. If the hardware instance value is non-zero, then the 64-bit
136 hardware instance value is converted to a 16 character hex string and appended
137 to base name. The UEFI Variable name returned is allocated using the UEFI
138 Boot Service AllocatePool().
140 @param[in] HardwareInstance 64-bit hardware instance value.
141 @param[in] BaseVariableName Null-terminated Unicode string that is the base
142 name of the UEFI Variable.
144 @return Pointer to the allocated UEFI Variable name. Returns NULL if the
145 UEFI Variable can not be allocated.
149 GenerateFmpVariableName (
150 IN UINT64 HardwareInstance
,
151 IN CHAR16
*BaseVariableName
155 CHAR16
*VariableName
;
158 // Allocate Unicode string with room for BaseVariableName and a 16 digit
159 // hexadecimal value for the HardwareInstance value.
161 Size
= StrSize (BaseVariableName
) + 16 * sizeof (CHAR16
);
162 VariableName
= AllocateCopyPool (Size
, BaseVariableName
);
163 if (VariableName
== NULL
) {
164 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to generate variable name %s.\n", mImageIdName
, BaseVariableName
));
168 if (HardwareInstance
== 0) {
172 UnicodeValueToStringS (
173 &VariableName
[StrLen (BaseVariableName
)],
175 PREFIX_ZERO
| RADIX_HEX
,
183 Generate the names of the UEFI Variables used to store state information for
184 a managed controller. The UEFI Variables names are a combination of a base
185 name and an optional hardware instance value as a 16 character hex value. If
186 the hardware instance value is 0, then the 16 character hex value is not
187 included. These storage for the UEFI Variable names are allocated using the
188 UEFI Boot Service AllocatePool() and the pointers are stored in the Private.
189 The following are examples of variable names produces for hardware instance
190 value 0 and value 0x1234567812345678.
198 FmpVersion1234567812345678
199 FmpLsv1234567812345678
200 LastAttemptStatus1234567812345678
201 LastAttemptVersion1234567812345678
202 FmpState1234567812345678
204 @param[in,out] Private Private context structure for the managed controller.
207 GenerateFmpVariableNames (
208 IN OUT FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
213 FMP_CONTROLLER_STATE FmpControllerState
;
215 if (Private
->VersionVariableName
!= NULL
) {
216 FreePool (Private
->VersionVariableName
);
219 if (Private
->LsvVariableName
!= NULL
) {
220 FreePool (Private
->LsvVariableName
);
223 if (Private
->LastAttemptStatusVariableName
!= NULL
) {
224 FreePool (Private
->LastAttemptStatusVariableName
);
227 if (Private
->LastAttemptVersionVariableName
!= NULL
) {
228 FreePool (Private
->LastAttemptVersionVariableName
);
231 if (Private
->FmpStateVariableName
!= NULL
) {
232 FreePool (Private
->FmpStateVariableName
);
235 Private
->VersionVariableName
= GenerateFmpVariableName (
236 Private
->Descriptor
.HardwareInstance
,
239 Private
->LsvVariableName
= GenerateFmpVariableName (
240 Private
->Descriptor
.HardwareInstance
,
243 Private
->LastAttemptStatusVariableName
= GenerateFmpVariableName (
244 Private
->Descriptor
.HardwareInstance
,
245 VARNAME_LASTATTEMPTSTATUS
247 Private
->LastAttemptVersionVariableName
= GenerateFmpVariableName (
248 Private
->Descriptor
.HardwareInstance
,
249 VARNAME_LASTATTEMPTVERSION
251 Private
->FmpStateVariableName
= GenerateFmpVariableName (
252 Private
->Descriptor
.HardwareInstance
,
256 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->VersionVariableName
));
257 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->LsvVariableName
));
258 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->LastAttemptStatusVariableName
));
259 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->LastAttemptVersionVariableName
));
260 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->FmpStateVariableName
));
262 Buffer
= GetFmpControllerState (Private
);
263 if (Buffer
!= NULL
) {
265 // FMP Controller State was found with correct size.
266 // Delete old variables if they exist.
269 DeleteFmpVariable (Private
->VersionVariableName
);
270 DeleteFmpVariable (Private
->LsvVariableName
);
271 DeleteFmpVariable (Private
->LastAttemptStatusVariableName
);
272 DeleteFmpVariable (Private
->LastAttemptVersionVariableName
);
277 // FMP Controller State was either not found or is wrong size.
278 // Create a new FMP Controller State variable with the correct size.
280 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Create controller state\n", mImageIdName
));
282 Private
->VersionVariableName
,
283 &FmpControllerState
.VersionValid
,
284 &FmpControllerState
.Version
287 Private
->LsvVariableName
,
288 &FmpControllerState
.LsvValid
,
289 &FmpControllerState
.Lsv
292 Private
->LastAttemptStatusVariableName
,
293 &FmpControllerState
.LastAttemptStatusValid
,
294 &FmpControllerState
.LastAttemptStatus
297 Private
->LastAttemptVersionVariableName
,
298 &FmpControllerState
.LastAttemptVersionValid
,
299 &FmpControllerState
.LastAttemptVersion
301 Status
= gRT
->SetVariable (
302 Private
->FmpStateVariableName
,
304 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
305 sizeof (FmpControllerState
),
308 if (EFI_ERROR (Status
)) {
310 // Failed to create FMP Controller State. In this case, do not
311 // delete the individual variables. They can be used again on next boot
312 // to create the FMP Controller State.
314 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to create controller state. Status = %r\n", mImageIdName
, Status
));
316 DeleteFmpVariable (Private
->VersionVariableName
);
317 DeleteFmpVariable (Private
->LsvVariableName
);
318 DeleteFmpVariable (Private
->LastAttemptStatusVariableName
);
319 DeleteFmpVariable (Private
->LastAttemptVersionVariableName
);
324 Returns the value used to fill in the Version field of the
325 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
326 service of the Firmware Management Protocol. The value is read from a UEFI
327 variable. If the UEFI variables does not exist, then a default version value
330 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
332 @param[in] Private Private context structure for the managed controller.
334 @return The version of the firmware image in the firmware device.
337 GetVersionFromVariable (
338 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
341 FMP_CONTROLLER_STATE
*FmpControllerState
;
344 Value
= DEFAULT_VERSION
;
345 FmpControllerState
= GetFmpControllerState (Private
);
346 if (FmpControllerState
!= NULL
) {
347 if (FmpControllerState
->VersionValid
) {
348 Value
= FmpControllerState
->Version
;
351 "FmpDxe(%s): Get variable %g %s Version %08x\n",
354 Private
->FmpStateVariableName
,
359 FreePool (FmpControllerState
);
366 Returns the value used to fill in the LowestSupportedVersion field of the
367 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
368 service of the Firmware Management Protocol. The value is read from a UEFI
369 variable. If the UEFI variables does not exist, then a default lowest
370 supported version value is returned.
372 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
374 @param[in] Private Private context structure for the managed controller.
376 @return The lowest supported version of the firmware image in the firmware
380 GetLowestSupportedVersionFromVariable (
381 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
384 FMP_CONTROLLER_STATE
*FmpControllerState
;
387 Value
= DEFAULT_LOWESTSUPPORTEDVERSION
;
388 FmpControllerState
= GetFmpControllerState (Private
);
389 if (FmpControllerState
!= NULL
) {
390 if (FmpControllerState
->LsvValid
) {
391 Value
= FmpControllerState
->Lsv
;
394 "FmpDxe(%s): Get variable %g %s LowestSupportedVersion %08x\n",
397 Private
->FmpStateVariableName
,
402 FreePool (FmpControllerState
);
409 Returns the value used to fill in the LastAttemptStatus field of the
410 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
411 service of the Firmware Management Protocol. The value is read from a UEFI
412 variable. If the UEFI variables does not exist, then a default last attempt
413 status value is returned.
415 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
417 @param[in] Private Private context structure for the managed controller.
419 @return The last attempt status value for the most recent capsule update.
422 GetLastAttemptStatusFromVariable (
423 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
426 FMP_CONTROLLER_STATE
*FmpControllerState
;
429 Value
= DEFAULT_LASTATTEMPTSTATUS
;
430 FmpControllerState
= GetFmpControllerState (Private
);
431 if (FmpControllerState
!= NULL
) {
432 if (FmpControllerState
->LastAttemptStatusValid
) {
433 Value
= FmpControllerState
->LastAttemptStatus
;
436 "FmpDxe(%s): Get variable %g %s LastAttemptStatus %08x\n",
439 Private
->FmpStateVariableName
,
444 FreePool (FmpControllerState
);
451 Returns the value used to fill in the LastAttemptVersion field of the
452 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
453 service of the Firmware Management Protocol. The value is read from a UEFI
454 variable. If the UEFI variables does not exist, then a default last attempt
455 version value is returned.
457 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
459 @param[in] Private Private context structure for the managed controller.
461 @return The last attempt version value for the most recent capsule update.
464 GetLastAttemptVersionFromVariable (
465 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
468 FMP_CONTROLLER_STATE
*FmpControllerState
;
471 Value
= DEFAULT_LASTATTEMPTVERSION
;
472 FmpControllerState
= GetFmpControllerState (Private
);
473 if (FmpControllerState
!= NULL
) {
474 if (FmpControllerState
->LastAttemptVersionValid
) {
475 Value
= FmpControllerState
->LastAttemptVersion
;
478 "FmpDxe(%s): Get variable %g %s LastAttemptVersion %08x\n",
481 Private
->FmpStateVariableName
,
486 FreePool (FmpControllerState
);
493 Saves the version current of the firmware image in the firmware device to a
496 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
498 @param[in] Private Private context structure for the managed controller.
499 @param[in] Version The version of the firmware image in the firmware device.
502 SetVersionInVariable (
503 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
508 FMP_CONTROLLER_STATE
*FmpControllerState
;
511 FmpControllerState
= GetFmpControllerState (Private
);
512 if (FmpControllerState
== NULL
) {
514 // Can not update value if FMP Controller State does not exist.
515 // This variable is guaranteed to be created by GenerateFmpVariableNames().
521 if (!FmpControllerState
->VersionValid
) {
525 if (FmpControllerState
->Version
!= Version
) {
530 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
532 FmpControllerState
->VersionValid
= TRUE
;
533 FmpControllerState
->Version
= Version
;
534 Status
= gRT
->SetVariable (
535 Private
->FmpStateVariableName
,
537 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
538 sizeof (*FmpControllerState
),
541 if (EFI_ERROR (Status
)) {
542 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
546 "FmpDxe(%s): Set variable %g %s Version %08x\n",
549 Private
->FmpStateVariableName
,
555 FreePool (FmpControllerState
);
559 Saves the lowest supported version current of the firmware image in the
560 firmware device to a UEFI variable.
562 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
564 @param[in] Private Private context structure for the managed
566 @param[in] LowestSupportedVersion The lowest supported version of the
567 firmware image in the firmware device.
570 SetLowestSupportedVersionInVariable (
571 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
572 IN UINT32 LowestSupportedVersion
576 FMP_CONTROLLER_STATE
*FmpControllerState
;
579 FmpControllerState
= GetFmpControllerState (Private
);
580 if (FmpControllerState
== NULL
) {
582 // Can not update value if FMP Controller State does not exist.
583 // This variable is guaranteed to be created by GenerateFmpVariableNames().
589 if (!FmpControllerState
->LsvValid
) {
593 if (FmpControllerState
->Lsv
< LowestSupportedVersion
) {
598 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
600 FmpControllerState
->LsvValid
= TRUE
;
601 FmpControllerState
->Lsv
= LowestSupportedVersion
;
602 Status
= gRT
->SetVariable (
603 Private
->FmpStateVariableName
,
605 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
606 sizeof (*FmpControllerState
),
609 if (EFI_ERROR (Status
)) {
610 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
614 "FmpDxe(%s): Set variable %g %s LowestSupportedVersion %08x\n",
617 Private
->FmpStateVariableName
,
618 LowestSupportedVersion
623 FreePool (FmpControllerState
);
627 Saves the last attempt status value of the most recent FMP capsule update to a
630 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
632 @param[in] Private Private context structure for the managed
634 @param[in] LastAttemptStatus The last attempt status of the most recent FMP
638 SetLastAttemptStatusInVariable (
639 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
640 IN UINT32 LastAttemptStatus
644 FMP_CONTROLLER_STATE
*FmpControllerState
;
647 FmpControllerState
= GetFmpControllerState (Private
);
648 if (FmpControllerState
== NULL
) {
650 // Can not update value if FMP Controller State does not exist.
651 // This variable is guaranteed to be created by GenerateFmpVariableNames().
657 if (!FmpControllerState
->LastAttemptStatusValid
) {
661 if (FmpControllerState
->LastAttemptStatus
!= LastAttemptStatus
) {
666 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
668 FmpControllerState
->LastAttemptStatusValid
= TRUE
;
669 FmpControllerState
->LastAttemptStatus
= LastAttemptStatus
;
670 Status
= gRT
->SetVariable (
671 Private
->FmpStateVariableName
,
673 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
674 sizeof (*FmpControllerState
),
677 if (EFI_ERROR (Status
)) {
678 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
682 "FmpDxe(%s): Set variable %g %s LastAttemptStatus %08x\n",
685 Private
->FmpStateVariableName
,
691 FreePool (FmpControllerState
);
695 Saves the last attempt version value of the most recent FMP capsule update to
698 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
700 @param[in] Private Private context structure for the managed
702 @param[in] LastAttemptVersion The last attempt version value of the most
703 recent FMP capsule update.
706 SetLastAttemptVersionInVariable (
707 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
708 IN UINT32 LastAttemptVersion
712 FMP_CONTROLLER_STATE
*FmpControllerState
;
715 FmpControllerState
= GetFmpControllerState (Private
);
716 if (FmpControllerState
== NULL
) {
718 // Can not update value if FMP Controller State does not exist.
719 // This variable is guaranteed to be created by GenerateFmpVariableNames().
725 if (!FmpControllerState
->LastAttemptVersionValid
) {
729 if (FmpControllerState
->LastAttemptVersion
!= LastAttemptVersion
) {
734 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
736 FmpControllerState
->LastAttemptVersionValid
= TRUE
;
737 FmpControllerState
->LastAttemptVersion
= LastAttemptVersion
;
738 Status
= gRT
->SetVariable (
739 Private
->FmpStateVariableName
,
741 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
742 sizeof (*FmpControllerState
),
745 if (EFI_ERROR (Status
)) {
746 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
750 "FmpDxe(%s): Set variable %g %s LastAttemptVersion %08x\n",
753 Private
->FmpStateVariableName
,
759 FreePool (FmpControllerState
);
763 Attempts to lock a single UEFI Variable propagating the error state of the
764 first lock attempt that fails. Uses gEfiCallerIdGuid as the variable GUID.
766 @param[in] PreviousStatus The previous UEFI Variable lock attempt status.
767 @param[in] VariableLock The EDK II Variable Lock Protocol instance.
768 @param[in] VariableName The name of the UEFI Variable to lock.
770 @retval EFI_SUCCESS The UEFI Variable was locked and the previous variable
771 lock attempt also succeeded.
772 @retval Other The UEFI Variable could not be locked or the previous
773 variable lock attempt failed.
778 IN EFI_STATUS PreviousStatus
,
779 IN EDKII_VARIABLE_POLICY_PROTOCOL
*VariablePolicy
,
780 IN CHAR16
*VariableName
785 // If success, go ahead and set the policies to protect the target variables.
786 Status
= RegisterBasicVariablePolicy (
790 VARIABLE_POLICY_NO_MIN_SIZE
,
791 VARIABLE_POLICY_NO_MAX_SIZE
,
792 VARIABLE_POLICY_NO_MUST_ATTR
,
793 VARIABLE_POLICY_NO_CANT_ATTR
,
794 VARIABLE_POLICY_TYPE_LOCK_NOW
796 if (EFI_ERROR (Status
)) {
799 "FmpDxe(%s): Failed to lock variable %g %s. Status = %r\n",
807 if (EFI_ERROR (PreviousStatus
)) {
808 return PreviousStatus
;
815 Locks all the UEFI Variables that use gEfiCallerIdGuid of the currently
818 @param[in] Private Private context structure for the managed controller.
820 @retval EFI_SUCCESS All UEFI variables are locked.
821 @retval EFI_UNSUPPORTED Variable Lock Protocol not found.
822 @retval Other One of the UEFI variables could not be locked.
825 LockAllFmpVariables (
826 FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
830 EDKII_VARIABLE_POLICY_PROTOCOL
*VariablePolicy
;
832 // Locate the VariablePolicy protocol.
833 Status
= gBS
->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid
, NULL
, (VOID
**)&VariablePolicy
);
834 if (EFI_ERROR (Status
)) {
835 DEBUG ((DEBUG_ERROR
, "FmpDxe %a - Could not locate VariablePolicy protocol! %r\n", __FUNCTION__
, Status
));
839 Status
= EFI_SUCCESS
;
840 Status
= LockFmpVariable (Status
, VariablePolicy
, Private
->VersionVariableName
);
841 Status
= LockFmpVariable (Status
, VariablePolicy
, Private
->LsvVariableName
);
842 Status
= LockFmpVariable (Status
, VariablePolicy
, Private
->LastAttemptStatusVariableName
);
843 Status
= LockFmpVariable (Status
, VariablePolicy
, Private
->LastAttemptVersionVariableName
);
844 Status
= LockFmpVariable (Status
, VariablePolicy
, Private
->FmpStateVariableName
);