- err = OpenEncryptedFileRaw(ctx->pathbuf.Buffer,
- CREATE_FOR_IMPORT, &rawctx);
+ flags = CREATE_FOR_IMPORT | OVERWRITE_HIDDEN;
+ if (dentry->d_inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY)
+ flags |= CREATE_FOR_DIR;
+
+ retried = false;
+retry:
+ err = OpenEncryptedFileRaw(ctx->pathbuf.Buffer, flags, &rawctx);
+ if (err == ERROR_SHARING_VIOLATION && !retried) {
+ /* This can be caused by the handle we have open to the target
+ * directory. Try closing it temporarily. */
+ close_target_directory(ctx);
+ retried = true;
+ goto retry;
+ }