http://bugs.winehq.org/show_bug.cgi?id=29669
Bug #: 29669 Summary: Dragon Age: Origins DVD authenticity checks fail (descriptor structures returned by DVD_READ_STRUCT need a descriptor header prepended) Product: Wine Version: 1.3.37 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello,
continuation of bug 29667 Now that DVD_LAYER_DESCRIPTOR data is properly verified, the game loader retrieves DvdManufacturerDescriptor using IOCTL_DVD_READ_STRUCTURE.
The interesting part is that the game loader copies the returned buffer bytes starting from offset 4 (throwing the first _four_ bytes away).
Remembering these four bytes, I went back here:
http://source.winehq.org/git/wine.git/blob/f082eac97c3ec71de58eea85bb4de5a12...
--- quote --- /* The documented format of DVD_LAYER_DESCRIPTOR is wrong. Even the format in the * DDK's header is wrong. There are four bytes at the start defined by * MMC-5. The first two are the size of the structure in big-endian order as * defined by MMC-5. The other two are reserved. */ --- quote ---
Actually all descriptor structures handled by DVD_READ_STRUCTURE have a DVD_DESCRIPTOR_HEADER prepended - not just DVD_LAYER_DESCRIPTOR.
This forum posts give some useful information:
http://forums.techguy.org/software-development/812384-scsi-read-disc-structu...
--- snip --- typedef struct { USHORT Length; /* bigEndian */ UCHAR Reserved[2]; } DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER; --- snip ---
Because of the missing DVD_DESCRIPTOR_HEADER, the first four bytes get lost hence the extraction of specific fields from manufacturer buffer gives wrong values.
With the DVD_DESCRIPTOR_HEADER in place, all DVD authenticity checks pass and the game successfully runs using original media.
Regards