- } else {
- set_errno_from_nt_status(status);
- ERROR_WITH_ERRNO("\"%ls\": Can't open file "
- "(status=0x%08"PRIx32")",
- printable_path(full_path), (u32)status);
- if (status == STATUS_FVE_LOCKED_VOLUME)
- ret = WIMLIB_ERR_FVE_LOCKED_VOLUME;
- else
- ret = WIMLIB_ERR_OPEN;
+ goto out;
+ }
+ if (status == STATUS_ACCESS_DENIED &&
+ (requestedPerms & FILE_READ_DATA)) {
+ /* This happens on encrypted files. */
+ requestedPerms &= ~FILE_READ_DATA;
+ goto retry_open;
+ }
+
+ if (status == STATUS_FVE_LOCKED_VOLUME) {
+ ERROR("\"%ls\": Can't open file "
+ "(encrypted volume has not been unlocked)",
+ printable_path(full_path));
+ ret = WIMLIB_ERR_FVE_LOCKED_VOLUME;
+ goto out;