32 IN EFI_GUID *FvNameGuid,
34 OUT VOID **FileData OPTIONAL,
35 OUT UINT32 *FileSize OPTIONAL
40 UINT32 AuthenticationStatus;
42 EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv2;
44 EFI_HANDLE *HandleBuffer;
48 EFI_HANDLE CurrentVolume;
52 Status =
gBS->LocateHandleBuffer (
60 if (EFI_ERROR (Status)) {
61 Status =
gBS->LocateHandleBuffer (
63 &gEfiFirmwareVolume2ProtocolGuid,
71 if (EFI_ERROR (Status)) {
75 for (Index = 0; Index < NumOfHandles; ++Index) {
76 CurrentVolume = HandleBuffer[Index];
79 Status =
gBS->HandleProtocol (
81 &gEfiFirmwareVolume2ProtocolGuid,
85 Status =
gBS->HandleProtocol (
92 if (EFI_ERROR (Status)) {
97 Status = Fv2->ReadFile (
104 &AuthenticationStatus
114 &AuthenticationStatus
118 if (!EFI_ERROR (Status)) {
119 FreePool (HandleBuffer);
121 if (FileData != NULL) {
122 ASSERT (FileSize != NULL);
126 Status = Fv2->ReadSection (
133 &AuthenticationStatus
143 &AuthenticationStatus
147 if (!EFI_ERROR (Status)) {
148 *FileSize = (UINT32)
Size;
150 CurrentVolume = NULL;
154 return CurrentVolume;
158 FreePool (HandleBuffer);
164 IN EFI_GUID *FileGuid
167 EFI_HANDLE VolumeHandle;
168 EFI_DEVICE_PATH_PROTOCOL *VolumeDevicePath;
169 MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FvFileNode;
172 if (VolumeHandle == NULL) {
177 if (VolumeDevicePath == NULL) {
181 EfiInitializeFwVolDevicepathNode (&FvFileNode, FileGuid);
182 return AppendDevicePathNode (VolumeDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&FvFileNode);