+ EFI_GUID *MatchGuid;\r
+ UINTN Idx;\r
+ UINTN GuidTableIdx;\r
+ BOOLEAN Found;\r
+\r
+ MatchGuid = ScanGuid (GuidTable, SizeOfGuidTable, Guid);\r
+ if (MatchGuid == NULL) {\r
+ return PCD_INVALID_TOKEN_NUMBER;\r
+ }\r
+\r
+ Found = FALSE;\r
+ GuidTableIdx = MatchGuid - GuidTable;\r
+ for (Idx = 0; Idx < SizeOfExMapTable; Idx++) {\r
+ if (ExMapTable[Idx].ExGuidIndex == GuidTableIdx) {\r
+ Found = TRUE;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (Found) {\r
+ if (TokenNumber == PCD_INVALID_TOKEN_NUMBER) {\r
+ return ExMapTable[Idx].ExTokenNumber;\r
+ }\r
+ \r
+ for ( ; Idx < SizeOfExMapTable; Idx++) {\r
+ if (ExMapTable[Idx].ExTokenNumber == TokenNumber) {\r
+ Idx++;\r
+ if (Idx == SizeOfExMapTable) {\r
+ //\r
+ // Exceed the length of ExMap Table\r
+ //\r
+ return PCD_INVALID_TOKEN_NUMBER;\r
+ } else if (ExMapTable[Idx].ExGuidIndex == GuidTableIdx) {\r
+ //\r
+ // Found the next match\r
+ //\r
+ return ExMapTable[Idx].ExTokenNumber;\r
+ } else {\r
+ //\r
+ // Guid has been changed. It is the next Token Space Guid.\r
+ // We should flag no more TokenNumber.\r
+ //\r
+ return PCD_INVALID_TOKEN_NUMBER;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ return PCD_INVALID_TOKEN_NUMBER;\r