当前位置: 首页 > 知识库问答 >
问题:

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

相弘方
2023-03-14

给定一个卷,如何确定它是否加密?我发现了像DADiskCopyDescription()和NSURL的getResourceValue:forKey:error这样的东西:它们提供了丰富的信息,但并没有提供卷是否加密。

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

共有2个答案

严曜文
2023-03-14

看起来可以使用<code>system_profiler-detailLevel-basic<code>获得这些信息。

巫经义
2023-03-14

您可以(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);
 类似资料:
  • 问题内容: 在C语言中,如何以编程方式找出Linux / Ubuntu上是否已在运行某个进程,以避免该进程两次启动?我正在寻找类似于pidof的东西。 问题答案: 您可以进入这些条目并在文件中检查过程,也可以在链接上执行操作(以下使用第一种方法)。

  • 问题内容: 是否有一个函数可以返回给定目录路径的驱动器分区上的可用空间? 问题答案: 校验 我相信您可以将“可用空间”计算为 。

  • 问题内容: 类似于此问题,但适用于MySQL。 我如何以编程方式确定MySQL中的外键引用(假设InnoDB)?我几乎可以通过以下方式获得它们: …但是可惜,似乎包含某些信息的评论列被截断了,所以我不能依靠它。一定有其他方法… 我对C API调用,SQL语句或其他任何东西都感到满意-我只需要一贯工作的东西。 注意:我也考虑过解析“ SHOW CREATE TABLE MyTableName”语句的

  • 问题内容: 如何以编程方式确定我的机器是x86,x64还是IA64? 问题答案: 在Windows系统上,您可以获得环境变量PROCESSOR_ARCHITECTURE。这是MSDN文章,解释了可以返回的值。

  • 问题内容: 正如问题所指出的那样,我主要想知道我的代码是否正在模拟器中运行,但也想知道正在运行或正在模拟的特定iphone版本。 编辑:我在问题名称中添加了“以编程方式”一词。我的问题的关键是能够根据正在运行的版本/模拟器动态地包含/排除代码,因此我真的在寻找可以提供此信息的预处理器指令之类的东西。 问题答案: 已经问过,但标题却大不相同。 为iPhone编译时Xcode设置了什么#define

  • 我还在想办法弄清楚回收站。我有一个arraylist,用于初始化回收器视图。 如何在设置适配器和布局管理器后向回收器视图添加新项目? 所以基本上,在我和之后,我如何向RecyclerView添加一个新项目呢??