1 /** @file
2   UEFI 2.2 Deferred Image Load Protocol definition.
3 
4   This protocol returns information about images whose load was denied because of security
5   considerations. This information can be used by the Boot Manager or another agent to reevaluate the
6   images when the current security profile has been changed, such as when the current user profile
7   changes. There can be more than one instance of this protocol installed.
8 
9   Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
10   This program and the accompanying materials
11   are licensed and made available under the terms and conditions of the BSD License
12   which accompanies this distribution.  The full text of the license may be found at
13   http://opensource.org/licenses/bsd-license.php
14 
15   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
16   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 
18 **/
19 
20 #ifndef __DEFERRED_IMAGE_LOAD_H__
21 #define __DEFERRED_IMAGE_LOAD_H__
22 
23 ///
24 /// Global ID for the Deferred Image Load Protocol
25 ///
26 #define EFI_DEFERRED_IMAGE_LOAD_PROTOCOL_GUID \
27   { \
28     0x15853d7c, 0x3ddf, 0x43e0, { 0xa1, 0xcb, 0xeb, 0xf8, 0x5b, 0x8f, 0x87, 0x2c } \
29   };
30 
31 typedef struct _EFI_DEFERRED_IMAGE_LOAD_PROTOCOL  EFI_DEFERRED_IMAGE_LOAD_PROTOCOL;
32 
33 /**
34   Returns information about a deferred image.
35 
36   This function returns information about a single deferred image. The deferred images are numbered
37   consecutively, starting with 0.  If there is no image which corresponds to ImageIndex, then
38   EFI_NOT_FOUND is returned. All deferred images may be returned by iteratively calling this
39   function until EFI_NOT_FOUND is returned.
40   Image may be NULL and ImageSize set to 0 if the decision to defer execution was made because
41   of the location of the executable image rather than its actual contents.  record handle until
42   there are no more, at which point UserInfo will point to NULL.
43 
44   @param[in]  This               Points to this instance of the EFI_DEFERRED_IMAGE_LOAD_PROTOCOL.
45   @param[in]  ImageIndex         Zero-based index of the deferred index.
46   @param[out] ImageDevicePath    On return, points to a pointer to the device path of the image.
47                                  The device path should not be freed by the caller.
48   @param[out] Image              On return, points to the first byte of the image or NULL if the
49                                  image is not available. The image should not be freed by the caller
50                                  unless LoadImage() has been called successfully.
51   @param[out] ImageSize          On return, the size of the image, or 0 if the image is not available.
52   @param[out] BootOption         On return, points to TRUE if the image was intended as a boot option
53                                  or FALSE if it was not intended as a boot option.
54 
55   @retval EFI_SUCCESS            Image information returned successfully.
56   @retval EFI_NOT_FOUND          ImageIndex does not refer to a valid image.
57   @retval EFI_INVALID_PARAMETER  ImageDevicePath is NULL or Image is NULL or ImageSize is NULL or
58                                  BootOption is NULL.
59 **/
60 typedef
61 EFI_STATUS
62 (EFIAPI *EFI_DEFERRED_IMAGE_INFO)(
63   IN  EFI_DEFERRED_IMAGE_LOAD_PROTOCOL  *This,
64   IN  UINTN                             ImageIndex,
65   OUT EFI_DEVICE_PATH_PROTOCOL          **ImageDevicePath,
66   OUT VOID                              **Image,
67   OUT UINTN                             *ImageSize,
68   OUT BOOLEAN                           *BootOption
69   );
70 
71 ///
72 /// This protocol returns information about a deferred image.
73 ///
74 struct _EFI_DEFERRED_IMAGE_LOAD_PROTOCOL {
75   EFI_DEFERRED_IMAGE_INFO  GetImageInfo;
76 };
77 
78 extern EFI_GUID gEfiDeferredImageLoadProtocolGuid;
79 
80 #endif
81