获取所有USB海量存储设备列表

时间:2017-06-27 16:11:00

标签: macos iokit

所以我有一个USB大容量存储设备,它将两个磁盘暴露给macOS。 我使用https://stackoverflow.com/users/1412808/rafael-baptista的文章检测到第一个: https://oroboro.com/usb-serial-number-osx/

但是,我无法使用代码获得第二个:

io_registry_entry_t    child;
io_iterator_t        child_iterator    = MACH_PORT_NULL;
kern_return_t        kr;

kr = IORegistryEntryCreateIterator(usbDevice,
                                   kIOServicePlane,
                                   kIORegistryIterateRecursively,
                                   &child_iterator);
if (kr != kIOReturnSuccess) {
    return;
}

while ((child = IOIteratorNext(child_iterator)) != MACH_PORT_NULL) {
    CFStringRef bsdName = NULL;

    bsdName = ( CFStringRef ) IORegistryEntrySearchCFProperty(child, kIOServicePlane, CFSTR( kIOBSDNameKey ), kCFAllocatorDefault, kIORegistryIterateRecursively );

    if ( bsdName ) {
....

我很感激任何关于我在这里可以做得更好的指示或信息。

感谢。

1 个答案:

答案 0 :(得分:1)

是肯定的。顺便说一句,我找到了解决方案。我正在使用磁盘仲裁来发现新驱动器。

  CFDictionaryRef dict = DADiskCopyDescription(disk);

    NSDictionary *diskDictionary = (__bridge NSDictionary *)dict;
    NSURL *mountPointURL = diskDictionary[(__bridge NSString *)kDADiskDescriptionVolumePathKey];
    NSString *deviceMountPath = [mountPointURL path];

    NSString *deviceDiskPath = diskDictionary[(__bridge NSString *)kDADiskDescriptionDevicePathKey];

deviceDiskPath将包含IOPath,其中包括设备ID(或名称)和VendorID!