## @file
#  This driver produces security2 and security architectural protocol based on SecurityManagementLib.
#
#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution. The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = SecurityStubDxe
  MODULE_UNI_FILE                = SecurityStubDxe.uni
  FILE_GUID                      = F80697E9-7FD6-4665-8646-88E33EF71DFC
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = SecurityStubInitialize


#
#  VALID_ARCHITECTURES           = IA32 X64 EBC
#

[Sources]
  SecurityStub.c
  Defer3rdPartyImageLoad.c
  Defer3rdPartyImageLoad.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiDriverEntryPoint
  UefiBootServicesTableLib
  DebugLib
  SecurityManagementLib
  ReportStatusCodeLib
  UefiLib

[Guids]
  gEfiEndOfDxeEventGroupGuid                    ## CONSUMES ## Event

[Protocols]
  gEfiSecurityArchProtocolGuid                  ## PRODUCES
  gEfiSecurity2ArchProtocolGuid                 ## PRODUCES
  gEfiDeferredImageLoadProtocolGuid             ## PRODUCES
  gEfiDxeSmmReadyToLockProtocolGuid             ## NOTIFY

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  SecurityStubDxeExtra.uni
