如何以编程方式确定磁盘是否在OS X上加密?

时间:2013-02-13 11:18:15

标签: macos cocoa

给定音量,如何确定它是否加密?我找到了像DADiskCopyDescription()和NSURL的getResourceValue:forKey:error这样的东西,它提供了大量的信息,但没有提供卷是否加密。

即使没有公共API,也可以接受来自操作系统附带的命令行工具的输出。我发现最接近的是'diskutil info / dev / disk0',但同样没有加密信息。令人恼火的是,当您单击蓝色信息按钮时,GUI Disk Utility应用程序会提供此信息。

2 个答案:

答案 0 :(得分:1)

您可以(ab)使用IOKit。请注意, CoreStorage加密属性未在任何地方正式定义,因此这绝对不是公共API。此外,您需要检查Core Storage为操作系统提供的整个磁盘对象(例如disk1),而不是Core Storage LV所在的分区(例如disk0s2)。

const char *bsdDisk = "disk1";

DASessionRef session = DASessionCreate(kCFAllocatorDefault);
DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, session, "disk1");

io_service_t diskService = DADiskCopyIOMedia(disk);
CFBooleanRef isEncrypted = IORegistryEntryCreateCFProperty(diskService,
                                                           CFSTR("CoreStorage Encrypted"),
                                                           kCFAllocatorDefault,
                                                           0);

fprintf(stdout,
        "%s %s encrypted\n",
        bsdDisk,
        (CFBooleanGetValue(isEncrypted)) ? "is" : "is not");

CFRelease(isEncrypted);
IOObjectRelease(diskService);
CFRelease(disk);
CFRelease(session);

答案 1 :(得分:0)

看起来这些信息可以使用system_profiler -detailLevel basic