- base::ScopedCFTypeRef<CFDictionaryRef> disk_description(
- DADiskCopyDescription(disk));
-
- CFBooleanRef ejectable = base::mac::GetValueFromDictionary<CFBooleanRef>(
- disk_description, kDADiskDescriptionMediaEjectableKey);
- CFBooleanRef removable = base::mac::GetValueFromDictionary<CFBooleanRef>(
- disk_description, kDADiskDescriptionMediaRemovableKey);
- CFBooleanRef writable = base::mac::GetValueFromDictionary<CFBooleanRef>(
- disk_description, kDADiskDescriptionMediaWritableKey);
- CFBooleanRef whole = base::mac::GetValueFromDictionary<CFBooleanRef>(
- disk_description, kDADiskDescriptionMediaWholeKey);
- CFStringRef kind = base::mac::GetValueFromDictionary<CFStringRef>(
- disk_description, kDADiskDescriptionMediaKindKey);
-
- // A drive is valid if it is
- // - ejectable
- // - removable
- // - writable
- // - a whole drive
- // - it is of type IOMedia (external DVD drives and the like are IOCDMedia or
- // IODVDMedia)
- return CFBooleanGetValue(ejectable) && CFBooleanGetValue(removable) &&
- CFBooleanGetValue(writable) && CFBooleanGetValue(whole) &&
- CFStringCompare(kind, CFSTR("IOMedia"), 0) == kCFCompareEqualTo;