1

给定一个卷,我如何确定它是否被加密?我发现了像 DADiskCopyDescription() 和 NSURL 的 getResourceValue:forKey:error: 这样的东西,它们提供了大量信息,但不知道卷是否加密。

即使没有用于此的公共 API,从操作系统附带的命令行工具中抓取输出也是可以接受的。我找到的最接近的是“diskutil info /dev/disk0”,但同样没有加密信息。令人讨厌的是,当您单击蓝色信息按钮时,GUI 磁盘实用程序应用程序确实会提供此信息。

4

2 回答 2

1

您可以(ab)为此使用 IOKit。请注意,CoreStorage Encrypted属性并未在任何地方正式定义,因此这绝对不是公共 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);
于 2013-02-13T16:54:22.870 回答
0

看起来此信息可使用system_profiler -detailLevel basic.

于 2016-12-22T17:46:49.180 回答