get_vol_flags(target, &vol_flags, &short_names_supported);
- supported_features->archive_files = 1;
+ supported_features->readonly_files = 1;
supported_features->hidden_files = 1;
supported_features->system_files = 1;
+ supported_features->archive_files = 1;
if (vol_flags & FILE_FILE_COMPRESSION)
supported_features->compressed_files = 1;
* directory, even though this contradicts Microsoft's
* documentation for FILE_ATTRIBUTE_READONLY which states it is
* not honored for directories! */
- FILE_BASIC_INFORMATION basic_info = { .FileAttributes = FILE_ATTRIBUTE_NORMAL };
- (*func_NtSetInformationFile)(h, &ctx->iosb, &basic_info,
- sizeof(basic_info), FileBasicInformation);
+ if (!(ctx->common.extract_flags & WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES)) {
+ FILE_BASIC_INFORMATION basic_info =
+ { .FileAttributes = FILE_ATTRIBUTE_NORMAL };
+ (*func_NtSetInformationFile)(h, &ctx->iosb, &basic_info,
+ sizeof(basic_info),
+ FileBasicInformation);
+ }
/* Also try to remove the directory's DACL. This isn't supposed
* to be necessary because we *always* use backup semantics.
* STATUS_ACCESS_DENIED when creating a named data stream that
* was just deleted, using a directory-relative open. I have no
* idea why Windows is broken in this case. */
- static const SECURITY_DESCRIPTOR_RELATIVE desc = {
- .Revision = SECURITY_DESCRIPTOR_REVISION1,
- .Control = SE_SELF_RELATIVE | SE_DACL_PRESENT,
- .Owner = 0,
- .Group = 0,
- .Sacl = 0,
- .Dacl = 0,
- };
- (*func_NtSetSecurityObject)(h, DACL_SECURITY_INFORMATION, (void *)&desc);
+ if (!(ctx->common.extract_flags & WIMLIB_EXTRACT_FLAG_NO_ACLS)) {
+ static const SECURITY_DESCRIPTOR_RELATIVE desc = {
+ .Revision = SECURITY_DESCRIPTOR_REVISION1,
+ .Control = SE_SELF_RELATIVE | SE_DACL_PRESENT,
+ .Owner = 0,
+ .Group = 0,
+ .Sacl = 0,
+ .Dacl = 0,
+ };
+ (*func_NtSetSecurityObject)(h, DACL_SECURITY_INFORMATION,
+ (void *)&desc);
+ }
}
if (!dentry_is_root(dentry)) {