Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 获取所有USB大容量存储设备的列表_Macos_Iokit - Fatal编程技术网

Macos 获取所有USB大容量存储设备的列表

Macos 获取所有USB大容量存储设备的列表,macos,iokit,Macos,Iokit,所以我有一个USB大容量存储设备,它向macOS公开两个磁盘。 我使用的第一篇文章是: 但是,我无法使用以下代码获取第二个: io_registry_entry_t child; io_iterator_t child_iterator = MACH_PORT_NULL; kern_return_t kr; kr = IORegistryEntryCreateIterator(usbDevice,

所以我有一个USB大容量存储设备,它向macOS公开两个磁盘。 我使用的第一篇文章是:

但是,我无法使用以下代码获取第二个:

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 ) {
....
如果有任何关于我在这里可以做得更好的建议或信息,我将不胜感激


谢谢。

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

  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(或名称)和供应商ID

您的
usbDevice
手柄来自哪里?当然,这是这个问题的关键。它来自于usbDevice=IOIteratorNext(迭代器),当检测到新的匹配设备时,您会得到迭代器。我不认为这是个问题。那么,你是在迭代多个usbDevices吗?那部分工作吗?是的,它工作:-)好的,那么第二台设备上到底出了什么问题?您正在获取第二台设备的io_服务\u t句柄,但它在上面找不到BSDName属性?您是否使用
ioreg
或IORegistryExplorer检查了设备在IOKit注册表中的表示方式?也许给我们看一下设备的ioreg输出子树,它在哪里工作,在哪里不工作?