http://bugs.winehq.org/show_bug.cgi?id=7065
--- Comment #36 from Anastasius Focht focht@gmx.net 2007-10-14 05:19:35 --- Hello,
thanks for the log.
--- snip --- 0009:Call KERNEL32.DeviceIoControl(000000bc,002d1400,0033d6ec,0000000c,0033d4ec,00000200,0033d6fc,00000000) ret=007e7996 0009:Call ntdll.NtDeviceIoControlFile(000000bc,00000000,00000000,00000000,0033d400,002d1400,0033d6ec,0000000c,0033d4ec,00000200) ret=7ee756f0 0009:fixme:cdrom:CDROM_DeviceIoControl Unsupported IOCTL 2d1400 (type=2d access=0 func=500 meth=0) 0009:Ret ntdll.NtDeviceIoControlFile() retval=c000000d ret=7ee756f0 0009:Call ntdll.RtlNtStatusToDosError(c000000d) ret=7ee75618 0009:Ret ntdll.RtlNtStatusToDosError() retval=00000057 ret=7ee75618 0009:Ret KERNEL32.DeviceIoControl() retval=00000000 ret=007e7996 --- snip ---
Simple properties query. See http://bugs.winehq.org/show_bug.cgi?id=9956#c5 for stub implementation.
Though seems harmless if not implemented yet, probably can be ignored.
--- snip --- 0009:Call KERNEL32.DeviceIoControl(000000bc,0004d014,0091f540,0000002c,0091f540,00000050,0033d474,00000000) ret=00785d96 0009:Call ntdll.NtDeviceIoControlFile(000000bc,00000000,00000000,00000000,0033d380,0004d014,0091f540,0000002c,0091f540,00000050) ret=7ee756f0 0009:Ret ntdll.NtDeviceIoControlFile() retval=00000000 ret=7ee756f0 0009:Ret KERNEL32.DeviceIoControl() retval=00000001 ret=00785d96 --- snip ---
IOCTL: 0x4d014 -> IOCTL_SCSI_PASS_THROUGH_DIRECT decodes as: device= CONTROLLER (0x4), function=0x405, access=FILE_READ_ACCESS | FILE_WRITE_ACCESS, method = METHOD_BUFFERED Seems fine, no need to look at in/out buffers further.
--- snip --- 0009:Call KERNEL32.CreateFileA(0033ca44 "\\.\CdRom0",c0000000,00000003,00000000,00000003,00000000,00000000) ret=007fea04 ... 0009:Ret KERNEL32.CreateFileA() retval=ffffffff ret=007fea04 --- snip ---
Wine doesn't mimic all NT namespace flavors yet. You could manually create a symlink, something like:
.wine/dosdevices/cdrom0 -> /dev/cdrom
--- snip --- 0009:Call KERNEL32.DeviceIoControl(000000bc,002d4804,0033d6f0,00000001,00000000,00000000,0033d6f4,00000000) ret=20001ea2 0009:Call ntdll.NtDeviceIoControlFile(000000bc,00000000,00000000,00000000,0033d610,002d4804,0033d6f0,00000001,00000000,00000000) ret=7ee756f0 0009:Ret ntdll.NtDeviceIoControlFile() retval=80000011 ret=7ee756f0 0009:Call ntdll.RtlNtStatusToDosError(80000011) ret=7ee75618 0009:Ret ntdll.RtlNtStatusToDosError() retval=000000aa ret=7ee75618 0009:Ret KERNEL32.DeviceIoControl() retval=00000000 ret=20001ea2 --- snip ---
IOCTL: 0x2d4804 -> IOCTL_STORAGE_MEDIA_REMOVAL decodes as: device= MASS_STORAGE (0x2d), function=0x201, access=FILE_READ_ACCESS, method = METHOD_BUFFERED
Tries to lock cdrom drive (door). Though the returned error code reads "STATUS_DEVICE_BUSY"
CDROM_ControlEjection() -> CDROM_GetStatusCode( .. CDROM_LOCKDOOR, ..) -> FILE_GetNtStatus(void) -> errno = EBUSY -> return STATUS_DEVICE_BUSY
Maybe multiple programs have opened the device (not only wine), then the locking request would fail. Not sure if this is a showstopper.
------
Please try with symlink first (.wine/dosdevices/cdrom0 -> /dev/cdrom) and report back with new trace log if error persists.
If the error/trace log remains the same = failed ioctl cdrom lock as last request, try to patch dlls/ntdll/cdrom.c:CDROM_DeviceIoControl(IOCTL_STORAGE_MEDIA_REMOVAL) just for testing to return STATUS_SUCCESS (multiple lock requests/lock count is not handled yet)
Regards