获取卷的加密状态

时间:2018-04-07 20:40:56

标签: objective-c macos

我正在获取所有已安装的内部卷的数组,并检查卷是否使用FV2加密。以下是具体代码:

2

问题是无论卷是否加密,此代码都返回true。

2 个答案:

答案 0 :(得分:0)

根据the docs of NSURLVolumeIsEncryptedKey看起来volType将成为一个NSNumber(将原始值打包为对象的东西)。使用boolValue从中解压缩BOOL。

NSURL *url = [NSURL fileURLWithPath:NSHomeDirectory()];
NSNumber *volumeType = nil;
NSError *error = nil;
if (![url getResourceValue:&volumeType forKey:NSURLVolumeIsEncryptedKey error:&error]) {
    NSLog(@"Failed to get resource value: %@", error);
} else {
    BOOL isEncrypted = [volumeType boolValue];
    NSLog(@"Encrypted: %@", isEncrypted ? @"YES" : @"NO");
}

答案 1 :(得分:0)

如果系统上有多个分区,则API似乎无法正常工作。我已经在2个mac上测试了它,一个有3个分区,另一个只有root(单个分区)。以下swift代码在只有root分区(单分区)的系统上运行良好。

func checkIfHomeDirIsEncrypted() -> Bool? {
    let url:URL = URL.init(fileURLWithPath: NSHomeDirectory())
    do {
        let resourceValues:URLResourceValues = try url.resourceValues(forKeys: [URLResourceKey.volumeIsEncryptedKey, URLResourceKey.volumeIsRootFileSystemKey])
        if let isEncrypted:Bool = resourceValues.volumeIsEncrypted {
            return isEncrypted
        }
        print("Failed to get status")
        return nil
    }
    catch {
        print("Failed to get resource values")
        return nil
    }
}

if let isEncrypted:Bool = checkIfHomeDirIsEncrypted() {
    print("Volume is \(isEncrypted ? "encrypted":"not encrypted")")
}