[Bug 29669] New: Dragon Age: Origins DVD authenticity checks fail (descriptor structures returned by DVD_READ_STRUCT need a descriptor header prepended)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Jan 21 06:29:47 CST 2012


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 at winehq.org
        ReportedBy: focht at 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/f082eac97c3ec71de58eea85bb4de5a12b19f13f:/dlls/ntdll/cdrom.c#l213

--- 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-structure-c.html

--- 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

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list