-// Returns the value to which the CSR is being set.
-INTN RotateCsrValue(VOID) {
- INTN CurrentValue;
- UINTN Index = 0;
- CHAR16 *CurrentValueAsString = NULL;
- CHAR16 *TargetValueAsString = NULL;
- CHAR16 *ListItem;
- CHAR8 TargetCsr[4];
- EFI_GUID CsrGuid = CSR_GUID;
- EFI_STATUS Status;
- EG_PIXEL BGColor;
-
- BGColor.b = 255;
- BGColor.g = 175;
- BGColor.r = 100;
- BGColor.a = 0;
- CurrentValue = GetCsrStatus();
- if ((CurrentValue >= 0) && GlobalConfig.CsrValues) {
- CurrentValueAsString = PoolPrint(L"%02x", CurrentValue);
- while (TargetValueAsString == NULL) {
- ListItem = FindCommaDelimited(GlobalConfig.CsrValues, Index++);
- if (ListItem) {
- if (MyStriCmp(ListItem, CurrentValueAsString)) {
- TargetValueAsString = FindCommaDelimited(GlobalConfig.CsrValues, Index);
- if (TargetValueAsString == NULL)
- TargetValueAsString = FindCommaDelimited(GlobalConfig.CsrValues, 0);
- }
- } else {
- TargetValueAsString = FindCommaDelimited(GlobalConfig.CsrValues, 0);
- } // if/else
- MyFreePool(ListItem);
- } // while
- TargetCsr[0] = (CHAR8) StrToHex(TargetValueAsString, 0, 2);
- Status = EfivarSetRaw(&CsrGuid, L"csr-active-config", TargetCsr, 4, TRUE);
- if (Status == EFI_SUCCESS) {
- switch (TargetCsr[0]) {
- case SIP_ENABLED:
- egDisplayMessage(PoolPrint(L"Set System Integrity Protection to enabled (0x%x)", (UINTN) TargetCsr[0]), &BGColor);
- break;
- case SIP_DISABLED:
- egDisplayMessage(PoolPrint(L"Set System Integrity Protection status to disabled (0x%x)", (UINTN) TargetCsr[0]), &BGColor);
- break;
- default:
- egDisplayMessage(PoolPrint(L"Set System Integrity Protection status to 0x%x", (UINTN) TargetCsr[0]), &BGColor);
- }
- RecordgCsrStatus((INTN) TargetCsr[0]);
+VOID RotateCsrValue(VOID) {
+ UINT32 CurrentValue, TargetCsr;
+ UINT32_LIST *ListItem;
+ EFI_GUID CsrGuid = CSR_GUID;
+ EFI_STATUS Status;
+
+ Status = GetCsrStatus(&CurrentValue);
+ if ((Status == EFI_SUCCESS) && GlobalConfig.CsrValues) {
+ ListItem = GlobalConfig.CsrValues;
+ while ((ListItem != NULL) && (ListItem->Value != CurrentValue))
+ ListItem = ListItem->Next;
+ if (ListItem == NULL || ListItem->Next == NULL) {
+ TargetCsr = GlobalConfig.CsrValues->Value;