http://bugs.winehq.org/show_bug.cgi?id=10018
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net
--- Comment #12 from Anastasius Focht focht@gmx.net 2007-10-31 13:55:32 --- Hello,
I just had a live IRC "debug session" with an Adobe Photoshop CS2 owner - thanks @dergringo for having the patience to follow my instructions ;-). The activation process fails because CS2 tries to query S.M.A.R.T capabilities of first harddisk and the appropriate device ioctls are not implemented.
To get to this point you have either have to give raw access to harddisk/partition or setup a fake device. I recommend the latter. See http://bugs.winehq.org/show_bug.cgi?id=8298 how to do this (comment #12 and following) Basically setup fake data, mount via loop device and symlink "ln -s /dev/loop0 $(WINEPREFIX)/dosdevices/c::"
Relevant log:
--- snip --- 0053:Call KERNEL32.CreateFileA(7d942994 "\\.\c:",c0000000,00000003,00000000,00000003,00000000,00000000) ret=0040398a 0053:Ret KERNEL32.CreateFileA() retval=0000007c ret=0040398a 0053:Call KERNEL32.DeviceIoControl(0000007c,00074080,00000000,00000000,7d942958,00000018,7d942974,00000000) ret=00403782 0053:fixme:cdrom:CDROM_DeviceIoControl Unsupported IOCTL 74080 (type=7 access=1 func=20 meth=0) 0053:Ret KERNEL32.DeviceIoControl() retval=00000000 ret=00403782 0053:Call KERNEL32.DeviceIoControl(0000007c,0004100c,7d942974,00000006,7d942778,000000df,7d942968,00000000) ret=004035f7 0053:Ret KERNEL32.DeviceIoControl() retval=00000000 ret=004035f7 0053:Call KERNEL32.CloseHandle(0000007c) ret=004039ba 0053:Ret KERNEL32.CloseHandle() retval=00000001 ret=004039ba --- snip ---
Looking at 0x74080 in "include/winioctl.h":
--- snip --- 190 #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS) 191 #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS) 192 #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 193 #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) --- snip ---
Some "basic" S.M.A.R.T ioctls have to be implemented/stubbed to get the activation id based apps/games to work. I know this stuff from copy protections, hell even PunkBuster uses parts of this "id" info for their infamous "hardware" bans.
The standard way is to query drive info using IOCTL_STORAGE_QUERY_PROPERTY. This gives you volume serial number and the like. The second way is to query the drive SMART capabilities. Usually the first check is if the drive supports SMART by calling SMART_GET_VERSION. If succeeded, SMART is usually enabled with SMART_SEND_DRIVE_COMMAND (code B0) and then the data gets queried with SMART_RCV_DRIVE_DATA.
Regards