// /** @file
// Base ExtractGuidedSection Library.
//
// This instance can also be used in SEC phase only when the memory is ready in SEC phase.
// PCD PcdGuidedExtractHandlerTableAddress points to the available pysical memory space
// that is used to store Guided Extract Handlers.
// Note: A driver of type DXE_RUNTIME_DRIVER can use this ExtractGuidedSectionLib
// in their initialization without any issues. They only have to be careful in
// the implementation of runtime services, because this BASE library instance doesn't
// convert the address pointed by PcdGuidedExtractHandlerTableAddress to the virtual address.
//
// Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// **/


#string STR_MODULE_ABSTRACT             #language en-US "Base ExtractGuidedSection Library"

#string STR_MODULE_DESCRIPTION          #language en-US "This instance can also be used in the SEC phase only when the memory is ready in the SEC phase. PCD PcdGuidedExtractHandlerTableAddress points to the available physical memory space that is used to store Guided Extract Handlers. Note: A driver of type DXE_RUNTIME_DRIVER can use this ExtractGuidedSectionLib in its initialization without any issues. Be careful in the implementation of runtime services, because this BASE library instance doesn't convert the address pointed by PcdGuidedExtractHandlerTableAddress to the virtual address."

