[Bug 7065] Get SecuROM copy-protection working

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Oct 14 05:19:36 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=7065





--- Comment #36 from Anastasius Focht <focht at 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


-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list