MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / ScanDriverDir

Function ScanDriverDir

rEFIt_UEFI/refit/main.cpp:1073–1206  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1071//
1072
1073static VOID ScanDriverDir(IN CONST CHAR16 *Path, OUT EFI_HANDLE **DriversToConnect, OUT UINTN *DriversToConnectNum)
1074{
1075 EFI_STATUS Status;
1076 REFIT_DIR_ITER DirIter;
1077 EFI_FILE_INFO *DirEntry;
1078 CHAR16 FileName[256];
1079 EFI_HANDLE DriverHandle;
1080 EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
1081 UINTN DriversArrSize;
1082 UINTN DriversArrNum;
1083 EFI_HANDLE *DriversArr;
1084 BOOLEAN Skip;
1085 UINT8 AptioBlessed;
1086 STATIC CHAR16 CONST * CONST AptioNames[] = {
1087 L"AptioMemoryFix",
1088 L"AptioFix3Drv",
1089 L"AptioFix2Drv",
1090 L"AptioFixDrv",
1091 L"LowMemFix"
1092 };
1093 STATIC UINT8 CONST AptioIndices[] = {
1094 OFFSET_OF(DRIVERS_FLAGS, AptioMemFixLoaded),
1095 OFFSET_OF(DRIVERS_FLAGS, AptioFix3Loaded),
1096 OFFSET_OF(DRIVERS_FLAGS, AptioFix2Loaded),
1097 OFFSET_OF(DRIVERS_FLAGS, AptioFixLoaded),
1098 OFFSET_OF(DRIVERS_FLAGS, MemFixLoaded)
1099 };
1100
1101 DriversArrSize = 0;
1102 DriversArrNum = 0;
1103 DriversArr = NULL;
1104
1105//only one driver with highest priority will obtain status "Loaded"
1106 DirIterOpen(SelfRootDir, Path, &DirIter);
1107#define BOOLEAN_AT_INDEX(k) (*(BOOLEAN*)((UINTN)&gDriversFlags + AptioIndices[(k)]))
1108 for (size_t i = 0; i != ARRAY_SIZE(AptioIndices); ++i)
1109 BOOLEAN_AT_INDEX(i) = FALSE;
1110 AptioBlessed = (UINT8) ARRAY_SIZE(AptioNames);
1111 while (DirIterNext(&DirIter, 2, L"*.efi", &DirEntry)) {
1112 size_t i;
1113 for (i = 0; i != ARRAY_SIZE(AptioNames); ++i)
1114 if (StrStr(DirEntry->FileName, AptioNames[i]) != NULL)
1115 break;
1116 if (((UINT8) i) >= AptioBlessed)
1117 continue;
1118 AptioBlessed = (UINT8) i;
1119 if (!i)
1120 break;
1121 }
1122 DirIterClose(&DirIter);
1123
1124 // look through contents of the directory
1125 DirIterOpen(SelfRootDir, Path, &DirIter);
1126 while (DirIterNext(&DirIter, 2, L"*.efi", &DirEntry)) {
1127 Skip = (DirEntry->FileName[0] == L'.');
1128 for (size_t i=0; i<gSettings.DisabledDriverArray.size(); i++) {
1129 if (StrStr(DirEntry->FileName, gSettings.DisabledDriverArray[i].wc_str()) != NULL) {
1130 Skip = TRUE; // skip this

Callers 1

LoadDriversFunction · 0.85

Calls 13

DirIterOpenFunction · 0.85
DirIterNextFunction · 0.85
StrStrFunction · 0.85
DirIterCloseFunction · 0.85
StartEFIImageFunction · 0.85
StriStrFunction · 0.85
CheckErrorFunction · 0.85
FileDevicePathFunction · 0.70
XStringWClass · 0.50
AllocateZeroPoolFunction · 0.50
ReallocatePoolFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected