BOOLEAN ReadOnly;\r
EFI_STRING InternalProgress;\r
CHAR16 *TempString;\r
+ CHAR16 *KeywordStartPos;\r
\r
if (This == NULL || Progress == NULL || ProgressErr == NULL || KeywordString == NULL) {\r
return EFI_INVALID_PARAMETER;\r
KeywordData = NULL;\r
ValueElement = NULL;\r
ConfigResp = NULL;\r
+ KeywordStartPos = NULL;\r
KeywordStringId = 0;\r
\r
//\r
//\r
// 3. Extract keyword from the KeywordRequest string.\r
//\r
+ KeywordStartPos = StringPtr;\r
Status = ExtractKeyword(StringPtr, &KeywordData, &NextStringPtr);\r
if (EFI_ERROR (Status)) {\r
//\r
// 8. Check the readonly flag.\r
//\r
if (ExtractReadOnlyFromOpCode (OpCode) != ReadOnly) {\r
- *ProgressErr = KEYWORD_HANDLER_INCOMPATIBLE_VALUE_DETECTED;\r
- Status = EFI_INVALID_PARAMETER;\r
+ *ProgressErr = KEYWORD_HANDLER_ACCESS_NOT_PERMITTED;\r
+ Status = EFI_ACCESS_DENIED;\r
goto Done; \r
}\r
\r
FreePool (ConfigResp);\r
ConfigResp = NULL;\r
}\r
+ KeywordStartPos = NULL;\r
}\r
\r
//\r
*ProgressErr = KEYWORD_HANDLER_NO_ERROR;\r
\r
Done:\r
- *Progress = KeywordString + (StringPtr - TempString);\r
+ if (KeywordStartPos != NULL) {\r
+ *Progress = KeywordString + (KeywordStartPos - TempString);\r
+ } else {\r
+ *Progress = KeywordString + (StringPtr - TempString);\r
+ }\r
\r
ASSERT (TempString != NULL);\r
FreePool (TempString);\r
if (MultiConfigResp != NULL && MultiConfigResp != ConfigResp) {\r
FreePool (MultiConfigResp);\r
}\r
- \r
+\r
return Status;\r
}\r
\r