Xreveal 2.6.2 released

2024-06-01

Download xreveal_2.6.2.exe
Download dvdid.exe

Changelog
Version 2.6.2 2024-06-01
  Fixed crash when processing some BDJ certificates
  Added support for new UHD
  Added Indonesian translation
  Added show DVDID of DVDs in Status window

Added show DVDID of DVDs in Status window

It seems Microsoft changed the DVDID generation algorithm in Windows 10/11. You can check this in qdvd.dll (DVDUniqueVideoID::Computer and DVDFileList::AddSignatureFiles functions). The new algorithm only processes the signature files of VIDEO_TS.* and VTS_01_0.*.

If you are interested in the dvdid difference, you can download this tiny command line tool dvdid.exe. By default (without parameters) it will calculate all DVD drives dvdid. It also supports calculating the dvdid of ISO files and folders.

dvdid_win7 means dvdid that compatible with the dvdid_ms in Windows 7/Vista/XP/2000.
dvdid_win10 means dvdid that compatible with the dvdid_ms in Windows 10/11.
dvdid_ms is calculated by IDvdInfo2->GetDiscID:

IDvdInfo2* pdi;
HRESULT hr = CoCreateInstance(CLSID_DVDNavigator, NULL, CLSCTX_INPROC_SERVER, IID_IDvdInfo2, (void**)&pdi);
if (SUCCEEDED(hr)) {
    if (!SUCCEEDED(pdi->GetDiscID(DiscPath, &DiscId))) {
        assert(0);
    }
} else {
    assert(0);
}

We found some issues when coding dvdid:

  1. strcmp != lstrcmp
    some open source code of dvdid lib use strcmp to sort signature files list, but strcmp is not same with lstrcmp.
    qdvd.dll uses lstrcmpW:


    int rs1 = strcmp("foo.txt", "VIDEO_TS.IFO");     result = 1
    int rs2 = lstrcmpA("foo.txt", "VIDEO_TS.IFO");  result = -1
    because all files under VIDEO_TS/ is uppercase, for most of discs can get the right dvdid.
  2. UDF create time for DVD
    IDvdInfo2->GetDiscID uses file CreationTime to calculate CRC64.
    After digging into the Microsft UDF file system (udf.sys), and old source code: \udfs\strucsup.c, we found how Windows generates the CreationTime of UDF files.

    if it's EFE, uses EFE.CreationTime
    if it's FE, uses the EA_FileTimes if exists, else use FE.ModificationTime

    We are not sure whether the DVD specification uses EA_FileTimes. In this release, we use FE.ModificationTime as CreationTime.

When this dvdid code is mature enough, we will integrate it into "My Discs", to manipulate DVDs automatically.