/** @file Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #include #include #include VOID DumpLoadedImage ( IN UINTN Index, IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath ); VOID TestPointDumpSmmLoadedImage ( VOID ) { EFI_STATUS Status; EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; UINTN Index; UINTN HandleBufSize; EFI_HANDLE *HandleBuf; UINTN HandleCount; EFI_DEVICE_PATH_PROTOCOL *DevicePath; EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath; DEBUG ((DEBUG_INFO, "==== TestPointDumpSmmLoadedImage - Enter\n")); HandleBuf = NULL; HandleBufSize = 0; Status = gSmst->SmmLocateHandle ( ByProtocol, &gEfiLoadedImageProtocolGuid, NULL, &HandleBufSize, HandleBuf ); if (Status != EFI_BUFFER_TOO_SMALL) { goto Done ; } HandleBuf = AllocateZeroPool (HandleBufSize); if (HandleBuf == NULL) { goto Done ; } Status = gSmst->SmmLocateHandle ( ByProtocol, &gEfiLoadedImageProtocolGuid, NULL, &HandleBufSize, HandleBuf ); if (EFI_ERROR (Status)) { goto Done ; } HandleCount = HandleBufSize / sizeof(EFI_HANDLE); DEBUG ((DEBUG_INFO, "SmmLoadedImage (%d):\n", HandleCount)); for (Index = 0; Index < HandleCount; Index++) { Status = gSmst->SmmHandleProtocol ( HandleBuf[Index], &gEfiLoadedImageProtocolGuid, (VOID **)&LoadedImage ); if (EFI_ERROR(Status)) { continue; } Status = gSmst->SmmHandleProtocol (LoadedImage->DeviceHandle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath); if (EFI_ERROR(Status)) { DevicePath = NULL; } Status = gSmst->SmmHandleProtocol (HandleBuf[Index], &gEfiLoadedImageDevicePathProtocolGuid, (VOID **)&LoadedImageDevicePath); if (EFI_ERROR(Status)) { LoadedImageDevicePath = NULL; } DumpLoadedImage (Index, LoadedImage, DevicePath, LoadedImageDevicePath); } Done: if (HandleBuf != NULL) { FreePool (HandleBuf); } DEBUG ((DEBUG_INFO, "==== TestPointDumpSmmLoadedImage - Exit\n")); return ; }