0.3.6 (?/??/2012):
------------------
-- Added new feature to eject CDs (and other removable media): Press F12
- to eject all such media.
+- Added new feature to eject CDs (and other removable media): Press F12 to
+ eject all such media. This function works only on some Macs, though (it
+ relies on an Apple-specific EFI extension, and this extension isn't even
+ implemented on all Macs, much less on UEFI-based PCs).
- Fixed a problem that could cause GRUB 2 to fail to read its configuration
file when launched from rEFInd.
static EFI_GUID AppleRemovableMediaGuid = APPLE_REMOVABLE_MEDIA_PROTOCOL_GUID;
-// Eject all removable media
-VOID EjectMedia(VOID) {
+// Eject all removable media.
+// Returns TRUE if any media were ejected, FALSE otherwise.
+BOOLEAN EjectMedia(VOID) {
EFI_STATUS Status;
- UINTN HandleIndex, HandleCount = 0;
+ UINTN HandleIndex, HandleCount = 0, Ejected = 0;
EFI_HANDLE *Handles, Handle;
APPLE_REMOVABLE_MEDIA_PROTOCOL *Ejectable;
Status = LibLocateHandle(ByProtocol, &AppleRemovableMediaGuid, NULL, &HandleCount, &Handles);
if (EFI_ERROR(Status) || HandleCount == 0)
- return; // probably not an Apple system
+ return (FALSE); // probably not an Apple system
for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
Handle = Handles[HandleIndex];
if (EFI_ERROR(Status))
continue;
Status = refit_call1_wrapper(Ejectable->Eject, Ejectable);
+ if (!EFI_ERROR(Status))
+ Ejected++;
}
FreePool(Handles);
+ return (Ejected > 0);
} // VOID EjectMedia()
CHAR16 *FindNumbers(IN CHAR16 *InString);
CHAR16 *FindCommaDelimited(IN CHAR16 *InString, IN UINTN Index);
-VOID EjectMedia(VOID);
+BOOLEAN EjectMedia(VOID);
#endif
\ No newline at end of file