5.3.17 Exit()

The Exit() service is typically only used by UEFI applications. UEFI drivers usually have simple driver entry point implementations and typically return an EFI_STATUS code from their entry point function. This is the recommended style for UEFI driver implementations. If EFI_SUCCESS is returned by a UEFI driver, then the UEFI driver remains loaded in system memory. If an error status is returned, then the UEFI driver is unloaded from system memory.
The Exit() service allows a UEFI image to exit without having to return an EFI_STATUS value from the UEFI image's entry point. A UEFI driver with more complex logic in its entry point may discover a condition that requires the UEFI driver to exit immediately. In this rare condition, the Exit() service could be used. However, the UEFI driver implementation must take care to free any allocated resources and uninstall all protocols before returning an error code through the Exit() service. The following example shows how the Exit() service could be used by a UEFI driver to exit with a status code of EFI_UNSUPPORTED. The EDK II library UefiBootServicesTableLib provides the global gBS―a pointer to the UEFI Boot Services Table and gImageHandle―the Image Handle of the currently executing UEFI image.

Example 85-Exit from a UEFI Driver

#include <Uefi.h>
#include <Library/UefiBootServicesTableLib.h>
// Exit the current UEFI image with a status of EFI_UNSUPPORTED
gBS->Exit (gImageHandle, EFI_UNSUPPORTED, 0, NULL);