Ant*_*nio 5 macos disk objective-c
我查看了 Mac OSX 磁盘实用程序的主窗口,发现了有关 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)
但没有键返回我所需的第四个值。
我想在某个地方,也许在磁盘仲裁框架中,必须有一些东西可以提供此类信息,但我不知道在哪里。
一些忠告?
感谢帮助。
安东尼奥