http://bugs.winehq.org/show_bug.cgi?id=16592
HQ cs.tech@comcast.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |cs.tech@comcast.net
--- Comment #26 from HQ cs.tech@comcast.net 2010-05-15 03:44:21 ---
Looks like it might be fixed already with f7e6777e6e19ca3be4b84f98baf22ef53ab19f96. Please retest with 1.1.36.
Still broken in 1.1.44. Also, this bug affects many of the Ford service apps--not just the version and model-year described here.
Hmm. I suspect this case (root = "\:") is undocumented and/or old, but I can't prove it. The application came out in the mid-to-late 90's so it's probably intended for Win 95 or 98, although I know it also works on Win2K.
I think the application uses the 16-bit API
The viewer is a 16-bit application which (in 32-bit Windows) runs on the 16-bit virtual machine (NTVDM.EXE).
I guess the viewer starts up a dialog with a text like: Please insert volume 1993-1994 Truck CD-ROM - Revision 11.0\n into any CD-ROM Drive.\n\nPress OK to continue, Cancel to abort. Correct? What is the exact text?
Correct. But the message only appears after you choose a chapter from the index (which is copied to the HD by the installer). The viewer application (VIEW16.EXE) does not check for the CD immediately at launch.
Could you search the registry (and .ini files) for any reference to ":" ?
My Windows box does not have this string in the registry and I see no evidence that the Ford application directly depends on registry access. The viewer can be configured by editing the INFO1.INI file in C:\FORD\PUBS\PROGRAMS. The default behavior is to search for the service library files on any removable drive, as indicated by this section of the INI file:
[dealer_env] reader=4 *=REMOVEABLE,*,any CD-ROM Drive
Though not normally necessary, it is possible to specify a unique DOS device by replacing the leading asterisk with the device letter. For example:
D=REMOVEABLE,*,any CD-ROM Drive
I think the syntax here is application-specific, not a global standard (and again, it works in Windows but not in Wine). It's also possible to browse the CD through the Wine alias "d/" and the Wine file manager (which confirms that the CD is mounted properly and recognized by the host operating system).
I had not turned on "file" tracing in my earlier debugging, but I now notice that before the call to GetVolumeInformationW there seems to be some attempt to create a file L"\\.\\:". I don't understand the significance of this attempt - I expect it would fail on Windows because the CDROM is readonly, but maybe there is some strange magic going on. I don't have experience with the Windows API so maybe it's some idiom familar to Win programmers.
CreateFile and GetVolumeInformation are Win32 functions, so I guess they are translated from the original 16-bit equivalent by Wine's own VDM. Maybe this CD-ROM access bug is a function call translation error in the Wine VDM. I dont know anything about Wine's 16-bit virtual machine. For the sake of compatibility testing, can I copy the Microsoft virtual machine from my Windows installation disc and make Wine use that instead?
For reference:
"CreateFile Function creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. The function returns a handle that can be used to access the file or device for various types of I/O depending on the file or device and the flags and attributes specified. To perform this operation as a transacted operation, which results in a handle that can be used for transacted I/O, use the CreateFileTransacted function."
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
Some other posts which may be related (or inspirational): __________
For review... CD interfaces in wine not ready yet for cvs inclusion (yet), this patch implements two things:
- it replaces the wine internal & proprietary cdrom interface (used in MCICDA and MSCDEX/int2F) with the proper win32 ioctl:s calls
- it allows opening any device with CreateFile (using the name "\.\E:") (this is still very hackish, but not worse than what already existed)
http://www.winehq.org/pipermail/wine-devel/2001-December/003037.html ___________
[PATCH] ntdll: Implement CDROM_GetDeviceNumber() on Mac OS.
http://marc.info/?l=wine-patches&m=125616565804390&w=2 ___________
kernel32: Fix GetVolumeInformation[AW] to require trailing .
http://www.winehq.org/pipermail/wine-cvs/2009-April/055027.html