4

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

  • 磁盘说明
  • 连接总线
  • 连接类型
  • USB 序列号

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

DARegisterDiskAppearedCallback(session, NULL, OnDiskAppeared, (void *)NULL);

例程如下所示:

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);}

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

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

我通过调用打印了整个字典:

CFDictionaryApplyFunction(dict, printKeys, NULL);

像这样编写了 printKeys 回调例程:

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

CFShow(key);
CFShow(value);}

但没有键返回我想要的第四个值。

我猜在某个地方,也许在磁盘仲裁框架中,必须有一些东西来提供这样的信息,但我不知道在哪里。

一些忠告?

感谢帮助。

安东尼奥

4

0 回答 0