Macos 获取所有USB大容量存储设备的列表
所以我有一个USB大容量存储设备,它向macOS公开两个磁盘。 我使用的第一篇文章是: 但是,我无法使用以下代码获取第二个: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,
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输出子树,它在哪里工作,在哪里不工作?