https://bugs.winehq.org/show_bug.cgi?id=46863
Bug ID: 46863 Summary: If prefix contains "windows" drive information not available in 64-bit prefix Product: Wine Version: unspecified Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: darktjm@gmail.com Distribution: ---
All of my wine prefixes contain a path element called "windows" (actually, I use c:\windows, always). When I try to run installers or anything else that wants drive information, I get weird errors, starting with "Could not find DOS drive for current working directory" and usually ending with installer failures such as "The drive or UNC share you selected does not exist or is not accessible". Usually 64-bit games work fine once I figure out a way to install them anyway, such as direct extraction or 32-bit installs moved over.
I think I have traced it to dlls/ntdll/directory.c:lookup_unix_name. If the full unix path has "windows" in it, and redirects are possible (true for 64-bit), the stat is skipped. However, if name_len is 0, it assumes immediately after that the stat took place, and exits with an error ("drive root doesn't exist"). To fix, I changed the redirect test to add !name_len (line 2641 in 4.4):
if(!redirect || !name_len || (!strstr(....
A better fix might be to ignore "windows" if it's part of WINEPREFIX, so that the longer version of the search isn't always necessary. Since I don't know the code, I don't know how to skip over WINEPREFIX easily. With this fix, I can finally run installers in 64-bit prefixes, at least.
This bug has plagued me since I first got 64-bit prefixes working at all for myself, so around 2.0 or earlier. I only now got around to looking into it because a particular game requires a particular 3rd party installer to work in 64-bit mode, so my usual tricks don't cut it any more.