13#include <Library/UefiLib.h>
14#include <Library/BaseLib.h>
15#include <Library/DebugLib.h>
16#include <Library/DevicePathLib.h>
17#include <Library/MemoryAllocationLib.h>
18#include <Library/PrintLib.h>
19#include <Library/UefiBootServicesTableLib.h>
25#include <Protocol/ComponentName2.h>
26#include <Protocol/ComponentName.h>
27#include <Protocol/DriverBinding.h>
28#include <Protocol/FirmwareVolume2.h>
29#include <Protocol/LoadedImage.h>
35 IN CONST CHAR16 *Name,
69 IN CONST CHAR8 *SupportedLanguages,
70 IN CONST CHAR8 *InputLanguage,
71 IN BOOLEAN Iso639Language
76 BestLanguage = GetBestLanguage (
79 (InputLanguage != NULL) ? InputLanguage :
"",
100 IN CONST EFI_HANDLE TheHandle,
101 IN CONST CHAR8 *Language
104 EFI_COMPONENT_NAME2_PROTOCOL *CompNameStruct;
111 Status =
gBS->OpenProtocol (
113 &gEfiComponentName2ProtocolGuid,
114 (VOID **)&CompNameStruct,
117 EFI_OPEN_PROTOCOL_GET_PROTOCOL
119 if (!EFI_ERROR (Status)) {
121 Status = CompNameStruct->GetDriverName (CompNameStruct, BestLang, &RetVal);
122 if (BestLang != NULL) {
127 if (!EFI_ERROR (Status)) {
132 Status =
gBS->OpenProtocol (
135 (VOID **)&CompNameStruct,
138 EFI_OPEN_PROTOCOL_GET_PROTOCOL
140 if (!EFI_ERROR (Status)) {
142 Status = CompNameStruct->GetDriverName (CompNameStruct, BestLang, &RetVal);
143 if (BestLang != NULL) {
147 if (!EFI_ERROR (Status)) {
158 IN CONST CHAR16 *Name,
164 ReportContext = Context;
177 IN CONST CHAR16 *Name,
185 UnloadContext = Context;
191 EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO,
192 "OC: UnloadImage %s - %r\n",
222 EFI_HANDLE *HandleBuffer;
223 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
227 Status =
gBS->LocateHandleBuffer (
234 if (EFI_ERROR (Status)) {
239 Ascending ? (Index = 0) : (Index = HandleCount - 1);
241 Ascending ? Index++ : Index--
244 Status =
gBS->HandleProtocol (
247 (VOID **)&LoadedImage
249 if (!EFI_ERROR (Status)) {
252 ProcessImage (Context, Name, HandleBuffer[Index]);
257 FreePool (HandleBuffer);
264 IN OC_GLOBAL_CONFIG *Config
269 UINTN UnloadInfoSize;
272 if (Config->Uefi.Unload.Count == 0) {
276 if (!BaseOverflowMulUN (
277 Config->Uefi.Unload.Count,
282 UnloadContext.
UnloadInfo = AllocateZeroPool (UnloadInfoSize);
288 DEBUG ((DEBUG_ERROR,
"OC: Failed to allocate unload names!\n"));
292 for (Index = 0; Index < Config->Uefi.Unload.Count; ++Index) {
295 Config->Uefi.Unload.Values[Index]
300 for (Index2 = 0; Index2 < Index; ++Index2) {
305 DEBUG ((DEBUG_ERROR,
"OC: Failed to allocate unload names!\n"));
314 for (Index = 0; Index < Config->Uefi.Unload.Count; ++Index) {
316 DEBUG ((DEBUG_INFO,
"OC: Unload %s - %r\n", UnloadContext.
UnloadInfo[Index].
UnloadName, EFI_NOT_FOUND));
329 IN EFI_FILE_PROTOCOL *Root
334 CHAR16 TmpFileName[32];
341 return EFI_OUT_OF_RESOURCES;
350 UnicodeSPrint (TmpFileName,
sizeof (TmpFileName), L
"DriverImageNames.txt");
352 DEBUG ((DEBUG_INFO,
"OC: Dumped driver info - %r\n", Status));
EFI_STATUS OcSetFileData(IN EFI_FILE_PROTOCOL *WritableFs OPTIONAL, IN CONST CHAR16 *FileName, IN CONST VOID *Buffer, IN UINT32 Size)
VOID EFIAPI OcAsciiPrintBuffer(IN OUT CHAR8 **AsciiBuffer, IN OUT UINTN *AsciiBufferSize, IN CONST CHAR8 *FormatString,...)
CHAR16 * AsciiStrCopyToUnicode(IN CONST CHAR8 *String, IN UINTN Length)
#define OC_BLOB_GET(Blob)
APPLE_EVENT_HANDLE Handle
CONST CHAR16 *EFIAPI GetStringNameFromHandle(IN CONST EFI_HANDLE TheHandle, IN CONST CHAR8 *Language)
CHAR8 *EFIAPI GetBestLanguageForDriver(IN CONST CHAR8 *SupportedLanguages, IN CONST CHAR8 *InputLanguage, IN BOOLEAN Iso639Language)
VOID(* PROCESS_IMAGE)(IN VOID *Context, IN CONST CHAR16 *Name, IN EFI_HANDLE Handle)
VOID ReportImageName(IN VOID *Context, IN CONST CHAR16 *Name, IN EFI_HANDLE Handle)
VOID OcUnloadDrivers(IN OC_GLOBAL_CONFIG *Config)
VOID ProcessAllDrivers(IN VOID *Context, PROCESS_IMAGE ProcessImage, BOOLEAN Ascending)
EFI_STATUS OcDriverInfoDump(IN EFI_FILE_PROTOCOL *Root)
VOID UnloadImageByName(IN VOID *Context, IN CONST CHAR16 *Name, IN EFI_HANDLE Handle)
EFI_GUID gEfiDriverBindingProtocolGuid
EFI_GUID gEfiComponentNameProtocolGuid
EFI_GUID gEfiLoadedImageProtocolGuid