*** VOLUME LABEL

If a program depends on the correct label and/or serial number for the
CD-Rom, you can use the following command to extract that information:

      dd if=<your cdrom device> bs=1 skip=32808 count=32

You need read access to the device, so perhaps you have to do it as root.
Put the resulting string (without trailing blanks) into your
wine.ini/.winerc file like:
Label=<the label>

*** SERIAL NUMBER

[FIXME: if someone knows how to get the serial number in Linux, please
        put this information here].

If you have access to a Win32 system and C-compiler, you can compile the
following program to extract this information:

------------------------- begin volinfo.c ---------------------------
#include <windows.h>
#include <stdio.h>

int main(int argc,char **argv[])
{
    char  drive, root[]="C:\\", label[1002], fsname[1002];
    DWORD serial, flags, filenamelen, labellen = 1000, fsnamelen = 1000;

    printf("Drive Serial     Flags      Filename-Length "
           "Label                 Fsname\n");
    for (drive = 'C'; drive <= 'Z'; drive++)
    {
        root[0] = drive;
        if (GetVolumeInformationA(root,label,labellen,&serial,
                                  &filenamelen,&flags,fsname,fsnamelen))
        {
            strcat(label,"\""); strcat (fsname,"\"");
            printf("%c:\\   0x%08lx 0x%08lx %15ld \"%-20s \"%-20s\n",
                   drive, (long) serial, (long) flags, (long) filenamelen,
                   label, fsname);
        }
    }
    return 0;
}

Probably you can get that information also from the File Manager in
Windows.

------------------------- end volinfo.c -----------------------------


*** DRIVE LETTER

Some installed programs only look for the CD-Rom in the drive letter
that the CD-Rom had when the program was installed. In this case, make
sure you use the correct letter, especially if you installed the
program under Windows and are now trying to run it in Wine.
Some programs reportedly store the drive letter in their .INI file,
so you might look there and try to change it.
