IOCTL_CDROM_GET_CONFIGURATION control code
Requests feature and profile information from a CD-ROM device.
Multimedia devices have different characteristics depending on the type of media that is in the device. To provide drivers with a means of querying multimedia devices about these varying characteristics, the SCSI Multimedia - 3 (MMC-3) specification defines a command called "GET CONFIGURATION." This command permits drivers to query a device for both permanent information about the device and information that varies whenever the media changes. In Microsoft Windows 2000 and later operating systems, drivers can send this query to a device using the IOCTL_CDROM_GET_CONFIGURATION request.
The IOCTL_CDROM_GET_CONFIGURATION request returns a list of descriptors that describe the capabilities of the device for the current medium. These descriptors are divided into two groups called "feature descriptors" and "profile list descriptors." A feature specifies the capabilities of a device and its associated medium. A profile is a collection of features. If the device supports a profile, it supports all the features in the profile.
See the MMC-3 specification for further discussion concerning features and profiles.
Parameters.DeviceIoControl.InputBufferLength in the IO_STACK_LOCATION structure indicates the size, in bytes, of the input buffer, which must be = sizeof(GET_CONFIGURATION_IOCTL_INPUT).
Parameters.DeviceIoControl.OutputBufferLength in the I/O stack location indicates the size, in bytes, of the buffer, which must be >= sizeof(GET_CONFIGURATION_HEADER).
The driver returns the feature and profile data in the buffer at Irp->AssociatedIrp.SystemBuffer. The data begins with a header of type GET_CONFIGURATION_HEADER. Feature data is reported in the space immediately following this header. Its size and formatting depend on which features are reported.
The Information field is set to the number of bytes that are returned. The Status field is set to STATUS_SUCCESS if the request succeeds. If the Parameters.DeviceIoControl.InputBufferLength does not have the correct value, the request fails with a STATUS_INFO_LENGTH_MISMATCH error. If Parameters.DeviceIoControl.OutputBufferLength is not large enough, the request fails with a STATUS_BUFFER_TOO_SMALL error. If the value for the output buffer is too large, the request fails a STATUS_INVALID_BUFFER_SIZE message.