ObjectiveC中如何获取磁盘驱动器信息

Ant*_*nio 5 macos disk objective-c

我查看了 Mac OSX 磁盘实用程序的主窗口,发现了有关 USB 设备的四个信息(当选择驱动器项时):

  • 磁盘描述
  • 连接总线
  • 连接类型
  • USB 序列号

我能够使用磁盘仲裁框架获取前三个信息。我让他们注册一个回调例程以响应新的磁盘设备检测:

DARegisterDiskAppearedCallback(session, NULL, OnDiskAppeared, (void *)NULL);
Run Code Online (Sandbox Code Playgroud)

例程如下所示:

static void OnDiskAppeared(DADiskRef disk, void *__attribute__((__unused__)) ctx) {

CFDictionaryRef dict = DADiskCopyDescription(disk);

const void *DAMediaName = CFSTR("DAMediaName");
const void *DAVolumeName = CFSTR("DAVolumeName");
const void *DADeviceModel = CFSTR("DADeviceModel");
const void *DAMediaUUID = CFSTR("DAMediaUUID");
const void *DAVolumeUUID = CFSTR("DAVolumeUUID");    

printf("DAMediaName: ");
CFShow(CFDictionaryGetValue(dict, DAMediaName));
printf("DAVolumeName: ");
CFShow(CFDictionaryGetValue(dict, DAVolumeName));
printf("DADeviceModel: ");
CFShow(CFDictionaryGetValue(dict, DADeviceModel));
printf("DAMediaUUID: ");
CFShow(CFDictionaryGetValue(dict, DAMediaUUID));
printf("DAVolumeUUID: ");
CFShow(CFDictionaryGetValue(dict, DAVolumeUUID));

CFRelease(dict);}
Run Code Online (Sandbox Code Playgroud)

该例程实际上返回了有关卷和物理驱动器的信息,并且在最后一种情况下,返回了有关我之前讨论的三个磁盘属性的信息。

不幸的是我找不到关于第四个(USB 序列号)的任何信息。

我通过调用以下命令打印了整本词典:

CFDictionaryApplyFunction(dict, printKeys, NULL);
Run Code Online (Sandbox Code Playgroud)

像这样编写 printKeys 回调例程:

static void printKeys (const void* key, const void* value, void* context) {

CFShow(key);
CFShow(value);}
Run Code Online (Sandbox Code Playgroud)

但没有键返回我所需的第四个值。

我想在某个地方,也许在磁盘仲裁框架中,必须有一些东西可以提供此类信息,但我不知道在哪里。

一些忠告?

感谢帮助。

安东尼奥