OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
ListPartitions.c
Go to the documentation of this file.
1
15#include <Uefi.h>
16#include <Library/UefiLib.h>
17#include <Library/DebugLib.h>
18#include <Library/BaseMemoryLib.h>
19#include <Library/MemoryAllocationLib.h>
20#include <Library/OcMemoryLib.h>
21#include <Library/OcFileLib.h>
22#include <Library/UefiBootServicesTableLib.h>
23#include <Library/UefiApplicationEntryPoint.h>
24#include <Protocol/BlockIo.h>
25
26EFI_STATUS
27EFIAPI
29 IN EFI_HANDLE ImageHandle,
30 IN EFI_SYSTEM_TABLE *SystemTable
31 )
32{
33 EFI_STATUS Status;
34 UINTN Index;
35 UINTN HandleCount;
36 EFI_HANDLE *Handles;
37 EFI_BLOCK_IO_PROTOCOL *BlkIo;
38 CONST EFI_PARTITION_ENTRY *PartitionEntry;
39
40 //
41 // Find HardDrive
42 //
43 Status = gBS->LocateHandleBuffer (
44 ByProtocol,
46 NULL,
47 &HandleCount,
48 &Handles
49 );
50 if (EFI_ERROR (Status)) {
51 DEBUG ((DEBUG_WARN, "Failed to find any partitions - %r\n", Status));
52 return Status;
53 }
54
55 for (Index = 0; Index < HandleCount; ++Index) {
56 Status = gBS->HandleProtocol (
57 Handles[Index],
59 (VOID **)&BlkIo
60 );
61 if (EFI_ERROR (Status)) {
62 DEBUG ((DEBUG_WARN, "Partition #%u is unavailable - %r\n", (UINT32)(Index + 1), Status));
63 continue;
64 }
65
66 if (!BlkIo->Media->LogicalPartition) {
67 DEBUG ((DEBUG_WARN, "Partition #%u is not a logical partition\n", (UINT32)(Index + 1)));
68 continue;
69 }
70
71 PartitionEntry = OcGetGptPartitionEntry (Handles[Index]);
72 if (PartitionEntry == NULL) {
73 DEBUG ((DEBUG_WARN, "Partition #%u GPT entry is not accessible\n", (UINT32)(Index + 1)));
74 continue;
75 }
76
77 if (IsZeroGuid (&PartitionEntry->UniquePartitionGUID)) {
78 DEBUG ((DEBUG_WARN, "Partition #%u GPT entry has all-zero GUID\n", (UINT32)(Index + 1)));
79 continue;
80 }
81
82 DEBUG ((DEBUG_WARN, "Partition #%u details:\n", (UINT32)(Index + 1)));
83 DEBUG ((DEBUG_WARN, " PartitionName : %-36s\n", PartitionEntry->PartitionName));
84 DEBUG ((DEBUG_WARN, " PartitionTypeGUID : %g\n", &PartitionEntry->PartitionTypeGUID));
85 DEBUG ((DEBUG_WARN, " UniquePartitionGUID: %g\n", &PartitionEntry->UniquePartitionGUID));
86 }
87
88 FreePool (Handles);
89
90 return EFI_SUCCESS;
91}
EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
EFI_BOOT_SERVICES * gBS
CONST EFI_PARTITION_ENTRY * OcGetGptPartitionEntry(IN EFI_HANDLE FsHandle)
Definition DiskMisc.c:732
BOOLEAN EFIAPI IsZeroGuid(IN CONST GUID *Guid)
EFI_GUID gEfiBlockIoProtocolGuid