//\r
return RETURN_UNSUPPORTED;\r
}\r
+\r
+/**\r
+ Retrieves handlers of type EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER and \r
+ EXTRACT_GUIDED_SECTION_DECODE_HANDLER for a specific GUID section type.\r
+ \r
+ Retrieves the handlers associated with SectionGuid and returns them in \r
+ GetInfoHandler and DecodeHandler.\r
+\r
+ If the GUID value specified by SectionGuid has not been registered, then \r
+ return RETURN_NOT_FOUND.\r
+ \r
+ If SectionGuid is NULL, then ASSERT().\r
+\r
+ @param[in] SectionGuid A pointer to the GUID associated with the handlersof the GUIDed \r
+ section type being retrieved.\r
+ @param[out] GetInfoHandler Pointer to a function that examines a GUIDed section and returns \r
+ the size of the decoded buffer and the size of an optional scratch \r
+ buffer required to actually decode the data in a GUIDed section. \r
+ This is an optional parameter that may be NULL. If it is NULL, then \r
+ the previously registered handler is not returned.\r
+ @param[out] DecodeHandler Pointer to a function that decodes a GUIDed section into a caller\r
+ allocated output buffer. This is an optional parameter that may be NULL.\r
+ If it is NULL, then the previously registered handler is not returned.\r
+\r
+ @retval RETURN_SUCCESS The handlers were retrieved.\r
+ @retval RETURN_NOT_FOUND No handlers have been registered with the specified GUID.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+ExtractGuidedSectionGetHandlers (\r
+ IN CONST GUID *SectionGuid,\r
+ OUT EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *GetInfoHandler, OPTIONAL\r
+ OUT EXTRACT_GUIDED_SECTION_DECODE_HANDLER *DecodeHandler OPTIONAL\r
+ )\r
+{\r
+ UINT32 Index;\r
+ RETURN_STATUS Status;\r
+ EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo;\r
+\r
+ //\r
+ // Check input paramter\r
+ //\r
+ ASSERT (SectionGuid != NULL);\r
+\r
+ //\r
+ // Get the registered handler information\r
+ //\r
+ Status = GetExtractGuidedSectionHandlerInfo (&HandlerInfo);\r
+ if (RETURN_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Search the match registered GetInfo handler for the input guided section.\r
+ //\r
+ ASSERT (HandlerInfo != NULL);\r
+ for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) {\r
+ if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, SectionGuid)) {\r
+\r
+ //\r
+ // If the guided handler has been registered before, then return the registered handlers.\r
+ //\r
+ if (GetInfoHandler != NULL) {\r
+ *GetInfoHandler = HandlerInfo->ExtractGetInfoHandlerTable[Index];\r
+ }\r
+ if (DecodeHandler != NULL) {\r
+ *DecodeHandler = HandlerInfo->ExtractDecodeHandlerTable[Index];\r
+ }\r
+ return RETURN_SUCCESS;\r
+ }\r
+ }\r
+ return RETURN_NOT_FOUND;\r
+}\r