我正在查看Mac OSX磁盘工具的主窗口,我发现了有关USB设备的四个信息(当选择了驱动器项目时):
我能够使用Disk Arbitration框架获取前三个信息。 我让他们注册一个回调例程来响应新的磁盘设备检测:
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);}
但没有钥匙给我所需的第四个值。
我想某个地方,也许是在磁盘仲裁框架中,必须有一些东西可以提供这样的信息,但我无法弄清楚在哪里。
一些建议?
感谢您的帮助。
安东尼奥