http://bugs.winehq.org/show_bug.cgi?id=21448
--- Comment #5 from Thomas Mertes thomas.mertes@gmx.at 2010-02-19 02:58:04 --- I added "case IOCTL_STORAGE_QUERY_PROPERTY:" (with some code) to the function CDROM_DeviceIoControl() in the file "wine/dlls/ntdll/cdrom.c". The IOCTL_STORAGE_QUERY_PROPERTY request uses the structure
typedef struct _STORAGE_PROPERTY_QUERY { STORAGE_PROPERTY_ID PropertyId; STORAGE_QUERY_TYPE QueryType; UCHAR AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
I found out that the request used for RollerCoaster Tycoon 3 uses PropertyId=0 (which means StorageDeviceProperty) and QueryType=0 (which means PropertyStandardQuery). Doing a IOCTL_STORAGE_QUERY_PROPERTY / StorageDeviceProperty should fill the following structure with information:
typedef struct _STORAGE_DEVICE_DESCRIPTOR { ULONG Version; ULONG Size; UCHAR DeviceType; UCHAR DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; ULONG VendorIdOffset; ULONG ProductIdOffset; ULONG ProductRevisionOffset; ULONG SerialNumberOffset; STORAGE_BUS_TYPE BusType; ULONG RawPropertiesLength; UCHAR RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
Tests with such a request under windows show that the data returned comes from the cdrom drive and is independent from a cdrom which may or may not be in the drive.
What remains open is: How to get this information under Linux?
Greetings Thomas