summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDentomologist <dentomologist@gmail.com>2025-11-29 11:36:40 -0800
committerDentomologist <dentomologist@gmail.com>2025-11-29 14:02:24 -0800
commit448d61f262ebd30506a37b0b12ee437e844391ec (patch)
tree7bc50a861eb25b3b7793c443eb1cfde2c2c6188c
parente8c512dfb5b26b464c70f6bb89475533d5351a94 (diff)
Windows/DirectIOFile: Don't request DELETE access for read-only Open
Aside from being unnecessary, on Windows the flag prevents two instances of Dolphin (one instance from before 2509-371 when the flag was introduced and the other after) from running the same ROM simultaneously. Attempting to do so generated the false error `"[Rom]" is an invalid GCM/ISO file, or is not a GC/Wii ISO.` followed by `Failed to init core` and emulation shutdown on the second instance to start the game. Fixing the incorrect error message is a task I'm deferring to another PR. The problem didn't happen when both instances were 2509-371 or later, but I ran into it while bisecting an issue and it'd be nice to avoid that problem in the future.
-rw-r--r--Source/Core/Common/DirectIOFile.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/Source/Core/Common/DirectIOFile.cpp b/Source/Core/Common/DirectIOFile.cpp
index d72e98fa3b..bfe598dc48 100644
--- a/Source/Core/Common/DirectIOFile.cpp
+++ b/Source/Core/Common/DirectIOFile.cpp
@@ -86,8 +86,11 @@ bool DirectIOFile::Open(const std::string& path, AccessMode access_mode, OpenMod
else if (access_mode == AccessMode::Write)
desired_access = GENERIC_WRITE;
- // Allow deleting and renaming through our handle.
- desired_access |= DELETE;
+ if (access_mode != AccessMode::Read)
+ {
+ // Allow deleting and renaming through our handle.
+ desired_access |= DELETE;
+ }
// All sharing is allowed to more closely match default behavior on other OSes.
constexpr DWORD share_mode = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;