http://bugs.winehq.org/show_bug.cgi?id=16592
--- Comment #22 from G. Paul Ziemba p-wine-bugs@ziemba.us 2009-01-23 11:22:56 --- I looked in the registry and the installed files but did not find any references to a drive "". I looked over that big debug trace again and I agree that the application looking up drive "" is probably an artifact of some problem that occurs earlier, especially since it also tries to look up drive "[".
My current hypothesis is that the application has somewhat buggy code such as the following, and after a loop over drive letters it calls GetVolumeInfo on whatever value the loop exited with, e.g. (I hope my indentation doesn't get mangled):
int drivenum = 3; /* start at "C:" */ for (i = 0; i < 26; ++i) { ++drivenum; type = GetDriveType(drivenum); /* we see these calls in trace */ if ((type = THE_RIGHT_VALUE) && (other stuff??)) { break; } }
root[0] = 'A' -1 + drivenum; GetVolumeInfo(root, ...); /* we see this in trace, too */
If this is the case, it would explain why the application tries to look up the drive type on "[" and "", and would imply that within the loop it is not obtaining exactly the right values it expects to find for a CDROM on drive D.
I think the application uses the 16-bit API but I'm not sure how to get a better look at args/return values across that boundary. I wonder if WINE is not returning what it should for this older API.