[Bug 47054] New: SHCreateDirectory/ SHCreateDirectoryEx error result incorrect when hwnd is not NULL and directory already exists
wine-bugs at winehq.org
wine-bugs at winehq.org
Sat Apr 20 11:45:54 CDT 2019
https://bugs.winehq.org/show_bug.cgi?id=47054
Bug ID: 47054
Summary: SHCreateDirectory/SHCreateDirectoryEx error result
incorrect when hwnd is not NULL and directory already
exists
Product: Wine
Version: 4.6
Hardware: x86
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: shell32
Assignee: wine-bugs at winehq.org
Reporter: ubuntor2000 at gmail.com
Distribution: ---
Created attachment 64221
--> https://bugs.winehq.org/attachment.cgi?id=64221
Test case (source)
When SHCreateDirectory/SHCreateDirectoryEx is called with a non-NULL hwnd and a
path to a directory that already exists,
Wine returns 1223 (ERROR_CANCELLED) instead of 183 (ERROR_ALREADY_EXISTS).
This is being set in
https://source.winehq.org/git/wine.git/blob/fabde842ede40fc53cf6f5743d5b477841f7b11c:/dlls/shell32/shlfileop.c#l766
According to the MSDN
(https://docs.microsoft.com/en-us/windows/desktop/api/shlobj_core/nf-shlobj_core-shcreatedirectoryexw#remarks):
it seems that ERROR_CANCELLED should only be returned in special cases,
independent of whether hwnd is NULL or not.
This may also affect other error conditions.
Windows XP (VM) test case output (no warning messagebox is created):
SHCreateDirectory, NULL hwnd: 183
SHCreateDirectory, actual hwnd: 183
SHCreateDirectoryExW, NULL hwnd: 183
SHCreateDirectoryExW, actual hwnd: 183
Wine test case output:
SHCreateDirectory, NULL hwnd: 183
0009:fixme:shell:SHCreateDirectoryExW Show system error message, creating path
L"C:\\Windows\\Temp\\test", failed with error 183
SHCreateDirectory, actual hwnd: 1223
SHCreateDirectoryExW, NULL hwnd: 183
0009:fixme:shell:SHCreateDirectoryExW Show system error message, creating path
L"C:\\Windows\\Temp\\test", failed with error 183
SHCreateDirectoryExW, actual hwnd: 1223
This affects Atelier Lydie and Suelle: saving doesn't work when the SAVEDATA
directory already exists.
This probably happens since the game is checking if SHCreateDirectoryExW
succeeds or returns ERROR_ALREADY_EXISTS,
as manually patching shell32.dll.so to skip the FIXME section fixes the issue.
Associated Proton issue: https://github.com/ValveSoftware/Proton/issues/2452
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list