+ //\r
+ // "SecureBoot" is 8bit & read-only. It can only be changed according to PK update\r
+ //\r
+ if ((StrCmp (VariableName, EFI_PLATFORM_KEY_NAME) == 0) &&\r
+ CompareGuid (VendorGuid, &gEfiGlobalVariableGuid)) {\r
+ Status = InternalGetVariable (\r
+ EFI_SECURE_BOOT_MODE_NAME,\r
+ &gEfiGlobalVariableGuid,\r
+ &VariableData,\r
+ &VariableDataSize\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return;\r
+ }\r
+\r
+ //\r
+ // If PK update is successful. "SecureBoot" shall always exist ever since variable write service is ready\r
+ //\r
+ ASSERT(mSecureBootVarData != NULL);\r
+\r
+ if (CompareMem(mSecureBootVarData, VariableData, VariableDataSize) != 0) {\r
+ FreePool(mSecureBootVarData);\r
+ mSecureBootVarData = VariableData;\r
+ mSecureBootVarDataSize = VariableDataSize;\r
+\r
+ DEBUG((DEBUG_INFO, "%s variable updated according to PK change. Remeasure the value!\n", EFI_SECURE_BOOT_MODE_NAME));\r
+ Status = MeasureVariable (\r
+ EFI_SECURE_BOOT_MODE_NAME,\r
+ &gEfiGlobalVariableGuid,\r
+ mSecureBootVarData,\r
+ mSecureBootVarDataSize\r
+ );\r
+ DEBUG ((DEBUG_INFO, "MeasureBootPolicyVariable - %r\n", Status));\r
+ } else {\r
+ //\r
+ // "SecureBoot" variable is not changed\r
+ //\r
+ FreePool(VariableData);\r
+ }\r
+ }\r
+\r